#1 2018-09-02 22:19:32

Dem
Учасник
Зареєстрований: 2018-09-02
Повідомлень: 4

Выбор правильного варианта из предложенных ардуино

Добрый вечер!
Прощу помощи у опытных ардуищиков!
Имеется код, но не могу докумекать как заставить его работать как нужно.

Идея вот какая: на LCD (1602 подключен по I2C к ардуино нано) выводится вопрос: "Первый ответ, выберите A, B,C,D". Затем с клавы (клавиатура мембранная, 4х4) вводится  нужная буковка и, если ответ правильный, вылазит что-то вроде "ПРАВИЛЬНО" и после этого выводится "Второй ответ, выберите A, B, C, D" ну и дальше четвертый, пятый и т.д. Если неправильный, сгорает одна жизнь (заранее задается количество). Если сгорает последняя жизнь, то на дисплее что-то вроде: ГЕЙМ ОВЕР и дисплей гаснет, на кнопки не реагирует.

ПРОБЛЕМА: не могу додуматься, как сравнивать букву (нажатую кнопку на клаве), полученную от пользователя, с уже зашитым (правильным) вариантом для каждого из вопросов. Т.е. как сделать так, чтоб после получения правильного ответа от пользователя, програма сравнивала его с извесным. Если полученный ответ правильный, на экран выводить (ПРАВИЛЬНО) и показывать следующий вопрос. Если неправильный - чтоб величина, отвечающая за "жизни" стала меньше на 1. Если жизни закончатся - гейм овер. Если все ответы правильные и жизни не закончились - победа.

На сколько мне хватило знаний, написал, дальше прошу Вашей помощи... Матчасть читал, но додуматься как довести идею до финиша - немогу...
С програмированием дело имел только в школе, сейчас решил занятся так как преподаю деткам английский на дому. Решил сделать "умного робота", в какой заранее забиваю правильные ответы, а детки с ним взаимодействуют. Типо решил задание, выбрал вариант, а робот проверил. Сами понимаете, заитересовывать и учить молодое поколение нужно любыми средствами. По образованию - инженер строитель, по призванию учитель английсого языка. Ардуинка - хобби. Прошу прощения за много лишнего текста, вот код (вроде его правильно вставил, но если нет, поправьте, пожалуйста).


#include <Keypad.h>
#include <Servo.h>
#include <LCD_1602_RUS.h>

Servo servo; // в конце, если все ответы правильные, севра открывает лючок где лежит конфетка. Но до этого еще далеко

char question1 = 'A'; // тут вводятся правильные ответы.
char question2 = 'B';
char question3 = 'B';
char question4 = 'D';
char question5 = 'C';

LCD_1602_RUS lcd(0x27, 16, 2);

int ilosc; // number of clicks

const byte ROWS = 4; // 4 строки
const byte COLS = 4; // 4 столбца
char keys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {12, 11, 10, 9}; // тут пишем диджитал пины к которым клава коннектится к ардуинке.
byte colPins[COLS] = {8, 7, 6, 5};   //  Просто тупо слева направо первые 4 это ROWS последние 4 COLS.

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup()
{
  Serial.begin(9600);

  servo.attach(2);
  lcd.begin();
  lcd.setCursor(0, 0);
  lcd.print("ПЕРВЫЙ ОТВЕТ:");
  lcd.setCursor(0, 1);
  lcd.print("Выберите A,B,C,D");
}
void loop() {

  lcd.setCursor(0, 0);
  lcd.print("ПЕРВЫЙ ОТВЕТ:");
  lcd.setCursor(0, 1);
  lcd.print("Выберите A,B,C,D");

  char key = keypad.getKey();
  if (key == 'A')
  {
    lcd.setCursor(9, 1);
    lcd.cursor();                 // показываем курсор
    lcd.blink();                  // заставляем его мигать
    delay(3000);
    lcd.noBlink();
  }
  else if (key == 'B')
  {
    lcd.setCursor(11, 1);
    lcd.cursor();                 // показываем курсор
    lcd.blink();                  // заставляем его мигать
    delay(3000);
    lcd.noBlink();
  }
  else if (key == 'C')
  {
    lcd.setCursor(13, 1);
    lcd.cursor();                 // показываем курсор
    lcd.blink();                  // заставляем его мигать
    delay(3000);
    lcd.noBlink();
  }
  else if (key == 'D')
  {
    lcd.setCursor(15, 1);
    lcd.cursor();                 // показываем курсор
    lcd.blink();                  // заставляем его мигать
    delay(3000);
    lcd.noBlink();

    lcd.setCursor(0, 0);
    lcd.print("ВТОРОЙ ОТВЕТ:");
    lcd.setCursor(0, 1);
    lcd.print("Выберите A,B,C,D");
    delay(3000);
    if (key == 'A')
    {
      lcd.setCursor(9, 1);
      lcd.cursor();                 // показываем курсор
      lcd.blink();                  // заставляем его мигать
      delay(3000);
      lcd.noBlink();
    }
    else if (key == 'B')
    {
      lcd.setCursor(11, 1);
      lcd.cursor();                 // показываем курсор
      lcd.blink();                  // заставляем его мигать
      delay(3000);
      lcd.noBlink();
    }
    else if (key == 'C')
    {
      lcd.setCursor(13, 1);
      lcd.cursor();                 // показываем курсор
      lcd.blink();                  // заставляем его мигать
      delay(3000);
      lcd.noBlink();
    }
    else if (key == 'D')
    {
      lcd.setCursor(15, 1);
      lcd.cursor();                 // показываем курсор
      lcd.blink();                  // заставляем его мигать
      delay(3000);
      lcd.noBlink();
    }
    else if (key == '1', '2', '3', '4', '5', '6', '7', '8', '9')
    {
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Цифры не трогать");
      lcd.noCursor();
      delay(1000);
      lcd.noBlink();
    }
  }
}

Остання редакція Dem (2018-09-02 22:37:18)

Неактивний

#2 2018-09-02 22:26:38

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: Выбор правильного варианта из предложенных ардуино

Слов много... а в чем конкретно проблема так и не написал.

Неактивний

#3 2018-09-02 22:32:03

Dem
Учасник
Зареєстрований: 2018-09-02
Повідомлень: 4

Re: Выбор правильного варианта из предложенных ардуино

Проблемма в том, как сделать чтоб програма сравнивала полученный от пользователя с клавы символ и совершала действие. Если ответ правильный - написать ПРАВИЛЬНО на дисплее (это я научился) и вывести на экран второй вопрос и т.д. А если вариант неправильный - чтоб величина, отвечающая за жизни, стала меньше на 1. С  else и if знаком. Вот только проверку правильного ответа допилить не могу...

Неактивний

#4 2018-09-03 07:44:20

PablitoMc
Гість

Re: Выбор правильного варианта из предложенных ардуино

Наберите 0938500953. Чем смогу - помогу.

#5 2018-09-03 07:50:50

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 874

Re: Выбор правильного варианта из предложенных ардуино

заводите счётчик ответов.
в коде прописываете, при каком счётчике какой должен быть ответ, и сравниваете.

Неактивний

#6 2018-09-03 10:31:16

Dem
Учасник
Зареєстрований: 2018-09-02
Повідомлень: 4

Re: Выбор правильного варианта из предложенных ардуино

Спасибо, идею понял. Объявляем int, присваиваем ему правильный ответ, затем через if else сравниваем с получиным от пользователя?

Гость, спасибо за руку помощи, вайбер есть?

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму