| #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); | |
| } |