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

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

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

Далее перейдите к подключению зуммера, светодиодов и кнопок, которые подключаются к макетной плате и напрямую к 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