Ви не увійшли.
Сторінки 1
Добрый вечер!
Прощу помощи у опытных ардуищиков!
Имеется код, но не могу докумекать как заставить его работать как нужно.
Идея вот какая: на 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)
Неактивний
Проблемма в том, как сделать чтоб програма сравнивала полученный от пользователя с клавы символ и совершала действие. Если ответ правильный - написать ПРАВИЛЬНО на дисплее (это я научился) и вывести на экран второй вопрос и т.д. А если вариант неправильный - чтоб величина, отвечающая за жизни, стала меньше на 1. С else и if знаком. Вот только проверку правильного ответа допилить не могу...
Неактивний
Наберите 0938500953. Чем смогу - помогу.
Спасибо, идею понял. Объявляем int, присваиваем ему правильный ответ, затем через if else сравниваем с получиным от пользователя?
Гость, спасибо за руку помощи, вайбер есть?
Неактивний
Сторінки 1