цифровая электроника
вычислительная техника
встраиваемые системы

 



Игра на проверку реакции на основе Arduino

Автор: Mike(admin) от 27-07-2023, 23:55

Схема, которая представлена в данном проекте, представляет собой игру на реакцию, в которой целью схем является проверка ваших навыков реакции. Она работает следующим образом: вы нажимаете 1 из 2 кнопок, чтобы начать игру, и код в сочетании с ЖК-экраном подготавливает пользователя к игре, как только загорается зеленый светодиод, пользователь нажимает кнопку, и зуммер отключается, указывая на то, что вы нажали кнопку.


Игра на проверку реакции на основе Arduino

Если вы потерпите неудачу, схема начнет обратный отсчет с 3 и выведет сообщение о том, что вы потерпели неудачу. Если вы выиграете, она пропустит обратный отсчет и выведет сообщение с поздравлениями и временем, которое вам потребовалось, чтобы отреагировать.


Схема подключения компонентов представлена далее. Здесь помимо Arduino также задействован таймер 555 и десятичный счетчик 74HTC4017.


Игра на проверку реакции на основе Arduino

Для начала соберите все компоненты, организуйте их и начните работу с таймером 555, резистором 2,2 К, конденсатором и счетчиком.


Игра на проверку реакции на основе Arduino

Далее перейдите к подключению зуммера, светодиодов и кнопок, которые подключаются к макетной плате и напрямую к Arduino.


Игра на проверку реакции на основе Arduino

Следующей задачей является ЖК-экран, который можно подключить к отдельной макетной плате и напрямую к Arduino.


Игра на проверку реакции на основе Arduino

И, наконец, загрузите в Arduino следующий код.



#include <LiquidCrystal.h>

const int rs = 7, en = 6, d4 = 8, d5 = 9, d6 = 10, d7 = 11;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

int buzzer =12;
int led=13;
int startButton = 3;
int reactButton=2;


int time = 0;
int buttonTime;
int reactTime;

void setup()
{
 Serial.begin(9600);
 lcd.begin(16, 2);

 pinMode(led, OUTPUT);
 pinMode(buzzer, OUTPUT);
 pinMode(reactButton, INPUT);
 pinMode(startButton, INPUT);
}

void introScreen()
{
 delay(1000);
 lcd.print("Reaction Game");
 lcd.setCursor(0, 1);
 lcd.print("-Press the Start Button to Continue-");
 delay(1000);

}


void loseScreen()
{
 delay(1000);
 lcd.setCursor(0,0);
 lcd.print("You lose..");
 lcd.setCursor(0,1);
 lcd.print("Took too long! ");
 delay(4000);
 lcd.clear();

}


void winScreen()
{
 delay(1000);
 lcd.setCursor(0,0);
 lcd.print("Congratulations!");
 lcd.setCursor(0,1);
 lcd.print("Time: ");
 lcd.setCursor(5,1);
 lcd.print(reactTime + 1);
 lcd.print(" seconds.");
 int startButtonState = digitalRead(startButton); 
 delay(4000);
 lcd.clear();

}

void timer()
{
 Serial.print("Time: ");
 Serial.println(time);
 Serial.print("Time for LED to turn ON: ");
 int reactButtonState= digitalRead(reactButton);

 buttonTime=random(2, 8);
 Serial.println(buttonTime);
 while(time <= buttonTime && reactButtonState == 0)
 {
  delay(1000);

  if(time == buttonTime)
  {
   digitalWrite(led, HIGH);
   delay(500);
   time += 0.5;
   digitalWrite(led, LOW);
   delay(100);

   int count=0;
   lcd.clear();
   lcd.print("You lose in: ");
   lcd.setCursor(0,1);
   lcd.print("Count:");
   lcd.setCursor(6,1);
   lcd.print(4-(count));

   while(count < 3)
   {


count++;
    Serial.print("count: ");
    lcd.setCursor(6,1);
    Serial.println(count);
    lcd.print(4-(count));
    reactButtonState= digitalRead(reactButton);
    digitalWrite(buzzer, HIGH);
   if(reactButtonState == 1)
   {
    Serial.println("You win!");
    lcd.clear();
    winScreen();
    break;
   }
    delay(1000);
    digitalWrite(buzzer, LOW);

    reactTime++;

   }



   if(count ==3 && reactButtonState==0)
   {
    lcd.clear();
    loseScreen();
    delay(1000);
   }

 }
  time++;
}
}    

void waitScreen()
{
 delay(1000);
 lcd.clear();
 lcd.print("Get ready....");

}

void resetAll()
{
 time=0;
 reactTime=0;
 buttonTime=0;
 digitalWrite(buzzer, LOW);

}

void loop()
{
 introScreen();
 int startButtonState = digitalRead(startButton);
 while(startButtonState!= 1)
 {
  startButtonState = digitalRead(startButton);
 }
 waitScreen();
 timer();
 resetAll();

}



© digitrode.ru


Теги: Arduino




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

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

Оставить комментарий