«Игра на реакцию» — это простой мини проект на Arduino Uno, где вам понадобятся только светодиоды, резисторы с кнопками, макетная плата и коннекторы. В этой статье мы разместили схему сборки игры с кнопками и функциональную программу с подробными комментариями. В параметрах можно изменить режим работы программы — изменить временные интервалы, количество попыток и количество кнопок в схеме.
Необходимые компоненты:
- Arduino Uno / Arduino Nano / Arduino Mega
- тактовые кнопки
- светодиоды и резисторы
- макетная плата
- коннекторы
Дополнительные материалы на эту тему:
Принцип игры довольно прост: после включения светодиодов (они включаются случайным образом) необходимо как можно быстрее нажать соответствующую кнопку. Временной интервал для загорания светодиода, время ожидания ответа и другие параметры можно изменить в скетче. После всех попыток количество правильных попыток, среднее время отклика и лучшее время отклика отображаются на мониторе порта Arduino IDE.
Проект: Игра на реакцию на Arduino Uno

На схеме показано подключение трех пар светодиодов и кнопок, но вы можете подключить до пяти пар, изменив соответствующие параметры в коде. Важно: Подключите светодиоды последовательно, начиная с цифрового пина Ардуино 4 до 9 пина включительно, а кнопки — с порта A0 до A5. Игра начинается, когда загораются все светодиоды. При желании можно подключить зуммер для подачи звукового сигнала к началу игры на рефлексы.
Скетч для Игры на реакцию на Ардуино Уно
/* параметры, которые можно изменить */
int d1 = 1000; // d1 и d2 - диапазон включения светодиода
int d2 = 2000;
int d3 = 3000; // через сколько сек будет засчитана ошибка
byte tarrgr = 5; // количество попыток
byte knp = 3; // количество пар кнопок/светодиодов
/* параметры, которые можно изменить */
byte pinD = 4 + knp;
byte pinA = 14 + knp;
byte ext = 9;
byte hit;
byte err;
byte tarrgn;
boolean finich = true;
unsigned long timing;
unsigned long setreakt;
unsigned long bestreakt = 99999;
unsigned long medreakt;
void setup() {
Serial.begin(9600);
for (byte i = 4; i < pinD; i++) { pinMode(i, OUTPUT); }
for (byte i = 14; i < pinA; i++) { pinMode(i, INPUT); }
for (byte i = 14; i < pinA; i++) { analogWrite(i, LOW); }
}
void loop() {
while (tarrgn < tarrgr) {
int LED = random(4, 4 + knp);
int BTN = LED + 10;
int DEL = random(d1, d2);
delay(DEL);
digitalWrite(LED, HIGH);
timing = millis();
ext = 9;
while (ext < 10 && tarrgn < tarrgr) {
if (digitalRead(BTN) == HIGH) {
digitalWrite(LED, LOW);
setreakt = millis() - timing;
delay(300); hit++; tarrgn++; ext = 11;
}
if (millis() - timing > d3) {
digitalWrite(LED, LOW);
delay(300);
setreakt = 0; err++; tarrgn++; ext = 11;
}
}
if (setreakt < bestreakt && setreakt > 100) { bestreakt = setreakt; }
medreakt = medreakt + setreakt;
}
if (tarrgn == tarrgr && finich == true) {
medreakt = medreakt / hit;
if (medreakt > 99998) { medreakt = 0; }
if (bestreakt > 99998) { bestreakt = 0; }
Serial.println();
Serial.println("--- End of Round ---");
Serial.println();
Serial.println("Hits - " + String(hit));
Serial.println("Errors - " + String(err));
Serial.println("Best reaction - " + String(bestreakt));
Serial.println("Medium reaction - " + String(medreakt));
Serial.println();
Serial.println("Reboot for restart");
finich = false;
}
}
Заключение. К плате можно подключить Arduino LCD 1602 и выводить результаты уже на экран. Кроме того, можно создавать различные варианты включения светодиодов, например, для одновременного включения двух светодиодов. Если у вас возникли вопросы по мини проекту, вы можете оставить их в комментариях к этой записи — мы всегда стараемся решать проблемы и отвечать на все комментарии пользователей.

почему то после 5 раз схема перестает работать
Такой функции в программе не заложено