Перейти к содержанию

Проект на Ардуино Уно: Игра на реакцию

Проект на Ардуино Уно: Игра на реакцию

«Игра на реакцию» — это простой мини проект на Arduino Uno, где вам понадобятся только светодиоды, резисторы с кнопками, макетная плата и коннекторы. В этой статье мы разместили схему сборки игры с кнопками и функциональную программу с подробными комментариями. В параметрах можно изменить режим работы программы — изменить временные интервалы, количество попыток и количество кнопок в схеме.

Необходимые компоненты:

  • Arduino Uno / Arduino Nano / Arduino Mega
  • тактовые кнопки
  • светодиоды и резисторы
  • макетная плата
  • коннекторы

Дополнительные материалы на эту тему:

  1. Игра на Ардуино Повтори последовательность
  2. Пианино на Ардуино с кнопками и зуммером
  3. Тетрис на Ардуино с дисплеем OLED 128×64

Принцип игры довольно прост: после включения светодиодов (они включаются случайным образом) необходимо как можно быстрее нажать соответствующую кнопку. Временной интервал для загорания светодиода, время ожидания ответа и другие параметры можно изменить в скетче. После всех попыток количество правильных попыток, среднее время отклика и лучшее время отклика отображаются на мониторе порта Arduino IDE.

Проект: Игра на реакцию на Arduino Uno

Проект: Игра на реакцию на 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 и выводить результаты уже на экран. Кроме того, можно создавать различные варианты включения светодиодов, например, для одновременного включения двух светодиодов. Если у вас возникли вопросы по мини проекту, вы можете оставить их в комментариях к этой записи — мы всегда стараемся решать проблемы и отвечать на все комментарии пользователей.

Комментарии 2

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

newzaym
➜