Skip to content

Instantly share code, notes, and snippets.

@Fartomy
Created February 5, 2026 21:51
Show Gist options
  • Select an option

  • Save Fartomy/2cf5fc8fa126c6343921b5cc5b0b335a to your computer and use it in GitHub Desktop.

Select an option

Save Fartomy/2cf5fc8fa126c6343921b5cc5b0b335a to your computer and use it in GitHub Desktop.
Green and Red Light Game Arduino
#define LEDRED 2
#define LEDGRN 3
#define BUTTON 4
#define BUZZER 5
unsigned long currTime;
unsigned long prevTime = 0;
bool stateP = true;
bool stateR = false;
bool stateG = false;
bool key = false;
int scorePoint = 0;
int randomLEDcolor;
int randomLightONTime;
void setup()
{
pinMode(LEDRED, OUTPUT);
pinMode(LEDGRN, OUTPUT);
pinMode(BUTTON, INPUT);
pinMode(BUZZER, OUTPUT);
randomLEDcolor = random(2, 4);
randomLightONTime = random(500, 1001);
Serial.begin(9600);
}
void loop()
{
currTime = millis();
if(stateP)
prepareAnim();
else if(stateR)
readyAnim();
else if(stateG)
go();
if(key)
buttonCtrl();
if(scorePoint>= 3)
Winning();
else if(scorePoint < 0)
Losing();
}
void prepareAnim()
{
if(currTime - prevTime <= 3000)
{
digitalWrite(LEDRED, 1);
digitalWrite(BUZZER, 1);
delay(400);
digitalWrite(BUZZER, 0);
digitalWrite(LEDRED, 0);
digitalWrite(LEDGRN, 1);
digitalWrite(BUZZER, 1);
delay(400);
digitalWrite(LEDGRN, 0);
digitalWrite(BUZZER, 0);
}
else
{
prevTime = currTime;
stateP = false;
stateR = true;
}
}
void readyAnim()
{
if(currTime - prevTime <= 3000)
{
digitalWrite(LEDRED, 1);
digitalWrite(LEDGRN, 1);
digitalWrite(BUZZER, 1);
}
else
{
prevTime = currTime;
digitalWrite(LEDRED, 0);
digitalWrite(LEDGRN, 0);
digitalWrite(BUZZER, 0);
delay(500);
stateR = false;
stateG = true;
key = true;
}
}
void go()
{
if(currTime - prevTime <= randomLightONTime)
digitalWrite(randomLEDcolor, 1);
else
{
prevTime = currTime;
digitalWrite(LEDGRN, 0);
delay(500);
stateG = false;
stateP = true;
randomLEDcolor = random(2, 4);
randomLightONTime = random(500, 1001);
}
}
void buttonCtrl()
{
if(digitalRead(BUTTON) && digitalRead(LEDGRN))
{
scorePoint += 1;
Serial.print("Score Point++: ");
Serial.println(scorePoint);
key = false;
buzzerWinSFX();
while(digitalRead(BUTTON));
}
else if(digitalRead(BUTTON) && digitalRead(LEDRED))
{
scorePoint -= 1;
Serial.print("Score Point--: ");
Serial.println(scorePoint);
key = false;
buzzerLoseSFX();
while(digitalRead(BUTTON));
}
}
void buzzerWinSFX()
{
digitalWrite(BUZZER, 1);
delay(100);
digitalWrite(BUZZER, 0);
delay(100);
digitalWrite(BUZZER, 1);
delay(100);
digitalWrite(BUZZER, 0);
delay(100);
digitalWrite(BUZZER, 1);
delay(100);
digitalWrite(BUZZER, 0);
}
void buzzerLoseSFX()
{
digitalWrite(BUZZER, 1);
delay(1000);
digitalWrite(BUZZER, 0);
}
void Winning()
{
stateP = false;
stateR = false;
stateG = false;
key = false;
digitalWrite(LEDRED, 1);
digitalWrite(LEDGRN, 1);
digitalWrite(BUZZER, 1);
delay(50);
digitalWrite(LEDRED, 0);
digitalWrite(LEDGRN, 0);
digitalWrite(BUZZER, 0);
delay(50);
}
void Losing()
{
stateP = false;
stateR = false;
stateG = false;
key = false;
digitalWrite(LEDRED, 1);
digitalWrite(BUZZER, 1);
delay(50);
digitalWrite(LEDRED, 0);
digitalWrite(BUZZER, 0);
delay(50);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment