СОДЕРЖАНИЕ ►
Простой проект на Ардуино с кнопками, где требуется угадать код, сгенерированный микроконтроллером. При желании к плате Arduino можно подключить светодиоды для индикации правильного и неправильного ввода кода. Вся информация (код, который был сгенерирован и ответ пользователя) при этом будет выводится на монитор порта Arduino IDE при желании можно подключить дополнительно OLED дисплей.
Игра на Ардуино с кнопками «Угадай код»
Для этого проекта потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega;
- 3 тактовые кнопки;
- два светодиода и резисторы;
- макетная плата;
- провода «папа-папа».
Сборка проекта с кнопками «Угадай код»

На картинке выше показана сборка схемы проекта с кнопками «Угадай код». Обратите внимание, что кнопки подключаются к Ардуино без резистора, так как пины платы сконфигурированы с помощью INPUT_PULLUP, при котором к портам будут подтянуты резисторы 20кОм в самом микроконтроллере. При нажатии соответствующей кнопки к строке String otvet = «»; будут прибавляться числа «1», «2» или «3».
Скетч. Проект игры «Угадай код» на Ардуино
byte x; byte w = 1; String otvet = ""; String KOD = ""; // массив с вариантами кода char* kod[6] = {"123", "132", "231", "213", "321", "312"}; // переменные для считывания нажатия на кнопки boolean button1WasUp = true; boolean button2WasUp = true; boolean button3WasUp = true; void setup() { Serial.begin(9600); // пины для подключения кнопок pinMode(5, INPUT_PULLUP); pinMode(4, INPUT_PULLUP); pinMode(3, INPUT_PULLUP); // пины для подключения светодиодов pinMode(13, OUTPUT); pinMode(10, OUTPUT); } void loop() { /// ФУНКЦИЯ ГЕНЕРАЦИИ КОДА /// while (w == 1) { delay(500); digitalWrite(13, HIGH); digitalWrite(10, HIGH); delay(100); digitalWrite(13, LOW); digitalWrite(10, LOW); x = random(0, 5); KOD = String(kod[x]); Serial.print("KOD - "); Serial.println(KOD); Serial.println(""); Serial.print("OTVET - "); w = 2; } /// ВВОДИМ ПЕРВОЕ ЧИСЛО /// while (w == 2) { // узнаем текущее состояние кнопок boolean button1IsUp = digitalRead(5); boolean button2IsUp = digitalRead(4); boolean button3IsUp = digitalRead(3); // если первая кнопка была нажата, добавляем к строке "1" if (button1WasUp && !button1IsUp) { delay(10); button1IsUp = digitalRead(5); if (!button1IsUp) { otvet = otvet + "1"; Serial.print("1"); w = 3;} } button1WasUp = button1IsUp; // запоминаем состояние первой кнопки // если вторая кнопка была нажата, добавляем к строке "2" if (button2WasUp && !button2IsUp) { delay(10); button2IsUp = digitalRead(4); if (!button2IsUp) { otvet = otvet + "2"; Serial.print("2"); w = 3;} } button2WasUp = button2IsUp; // запоминаем состояние второй кнопки // если третья кнопка была нажата, добавляем к строке "3" if (button3WasUp && !button3IsUp) { delay(10); button3IsUp = digitalRead(3); if (!button3IsUp) { otvet = otvet + "3"; Serial.print("3"); w = 3;} } button3WasUp = button3IsUp; // запоминаем состояние третьей кнопки } /// ВВОДИМ ВТОРОЕ ЧИСЛО /// while (w == 3) { // узнаем текущее состояние кнопок boolean button1IsUp = digitalRead(5); boolean button2IsUp = digitalRead(4); boolean button3IsUp = digitalRead(3); // если первая кнопка была нажата, добавляем к строке "1" if (button1WasUp && !button1IsUp) { delay(10); button1IsUp = digitalRead(5); if (!button1IsUp) { otvet = otvet + "1"; Serial.print("1"); w = 4;} } button1WasUp = button1IsUp; // запоминаем состояние первой кнопки // если вторая кнопка была нажата, добавляем к строке "2" if (button2WasUp && !button2IsUp) { delay(10); button2IsUp = digitalRead(4); if (!button2IsUp) { otvet = otvet + "2"; Serial.print("2"); w = 4;} } button2WasUp = button2IsUp; // запоминаем состояние второй кнопки // если третья кнопка была нажата, добавляем к строке "3" if (button3WasUp && !button3IsUp) { delay(10); button3IsUp = digitalRead(3); if (!button3IsUp) { otvet = otvet + "3"; Serial.print("3"); w = 4;} } button3WasUp = button3IsUp; // запоминаем состояние третьей кнопки } /// ВВОДИМ ТРЕТЬЕ ЧИСЛО /// while (w == 4) { // узнаем текущее состояние кнопок boolean button1IsUp = digitalRead(5); boolean button2IsUp = digitalRead(4); boolean button3IsUp = digitalRead(3); // если первая кнопка была нажата, добавляем к строке "1" if (button1WasUp && !button1IsUp) { delay(10); button1IsUp = digitalRead(5); if (!button1IsUp) { otvet = otvet + "1"; Serial.println("1"); w = 5;} } button1WasUp = button1IsUp; // запоминаем состояние первой кнопки // если вторая кнопка была нажата, добавляем к строке "2" if (button2WasUp && !button2IsUp) { delay(10); button2IsUp = digitalRead(4); if (!button2IsUp) { otvet = otvet + "2"; Serial.println("2"); w = 5;} } button2WasUp = button2IsUp; // запоминаем состояние второй кнопки // если третья кнопка была нажата, добавляем к строке "3" if (button3WasUp && !button3IsUp) { delay(10); button3IsUp = digitalRead(3); if (!button3IsUp) { otvet = otvet + "3"; Serial.println("3"); w = 5;} } button3WasUp = button3IsUp; // запоминаем состояние третьей кнопки } /// СРАВНИВАЕМ НАШ ОТВЕТ С КОДОМ /// if (KOD == otvet ) { Serial.println(""); Serial.println("DA!"); Serial.println(""); digitalWrite(10, HIGH); delay(1000); digitalWrite(10, LOW); otvet = ""; // стираем строку w = 1; // генерируем новый код } else { Serial.println(""); Serial.println("HET!"); Serial.println(""); Serial.print("OTVET - "); digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); otvet = ""; // стираем строку w = 2; // новая попытка ввода кода } }
Пояснения к коду:
- в программе используется шесть вариантов кода, которые выбираются рандомно. Для того, чтобы угадать код — каждую кнопку следует нажимать только один раз, но в программе ограничений по нажатию нет;
- после того, как было введено три числа (кнопки были нажаты три раза и проверены с помощью команды digitalRead Arduino), происходит сравнение сгенерированного кода с введенным ответом.

Заключение. Данную программу можно использовать в различных проектах, например сделать будильник на Ардуино, где звуковой сигнал будет отключаться только при правильном вводе шифра. Или сделать кодовый замок, но в этом случае шифр не должен каждый раз генерироваться (иначе его сможет открыть любой человек), а шифр при этом можно сделать сложнее, состоящим из более, чем трех чисел.










Скажите пожалуйста а как мне сделать с 4 кнопками?
Надо подключить четвертую кнопку и переписать программу
ещё и провода нужны будут, и дописать код
Arduino IDE 2.3.4 выдает несколько ошибок,текст скопирован с сайта
Угадать код очень сложно, у меня все время красный горит
помогите что делать если все время мигает зеленый не зависимо от нажатий ПОМОГИТЕ плс