// Code Purpose:
// It is a simple game where a random message is generated asking the user to
// click on a specific button
// if the user clicked the correct button, "Yesssss" will be shown
// if the user clicked the wrong button, "Noooo" will be shown
// and the game will repeat itself
#include <LiquidCrystal_I2C.h>
#define LCD_address 0x27
#define LCD_columns 16
#define LCD_rows 2
LiquidCrystal_I2C lcd(LCD_address, LCD_columns , LCD_rows );
#define greenButton 13
#define redButton 12
unsigned long lastMillis = 0;
bool greenWasPressed = false;
bool redWasPressed = false;
void setup()
{
lcd.init(); // initialize the LCD
lcd.backlight(); // open the backlight
Serial.begin(115200);
pinMode(greenButton, INPUT_PULLUP);
pinMode(redButton, INPUT_PULLUP);
}
void loop()
{
// Getting a random number and show a message to the user
int randomNumber = random(1,3);
generateMessage(randomNumber);
// Looping till the user provide an answer
lastMillis = millis();
while(true)
{
// If a second passed and no answer yet, then print a dot
if(millis() - lastMillis > 1000)
{
Serial.print(". ");
lastMillis = millis();
}
// If a button was pressed then get out of the loop
if(digitalRead(greenButton) == LOW)
{
greenWasPressed = true;
redWasPressed = false;
break;
}
else if(digitalRead(redButton) == LOW)
{
greenWasPressed = false;
redWasPressed = true;
break;
}
}
// Show the result of the user action
generateAnswer(greenWasPressed, redWasPressed, randomNumber);
Serial.println();
delay(1000);
}
// Generate the message on the lcd for the user based on a number [1 or 2]
void generateMessage(int number)
{
lcd.clear();
lcd.setCursor(0,0);
if(number == 1)
{
lcd.print("Hit the G button");
}
else if(number == 2)
{
lcd.print("Hit the R button");
}
else
{
lcd.print("Error!!");
}
}
// generate the answer on the lcd for the user based on what the user clicked
void generateAnswer(bool wasItGreen, bool wasItRed, int number)
{
lcd.setCursor(0,1);
if(wasItGreen && number == 1)
{
lcd.print("Yessssss Green");
}
else if(wasItRed && number == 2)
{
lcd.print("Yessssss Red");
}
else
{
lcd.print("Noooooo");
}
}