// C++ code//#definegreenLED8#defineredLED9#defineyellowLED10#defineButtonPin3// random set of timesint timesOn[]={100,250,400,500};// random set of delaysint delayTimes[]={250,500,1000,1500};// we need volatile variables in order to be // able to be accessed/changed during the ISRvolatile boolean redLEDLit =false;volatile boolean isWinner =false;voidsetup(){pinMode(greenLED, OUTPUT);pinMode(redLED, OUTPUT);pinMode(yellowLED, OUTPUT);// creating interruptattachInterrupt(0, checkWinner, FALLING);turnOffLEDs();
Serial.begin(9600);}voidloop(){int LEDtoLight =random(1,4);int periodLEDisLit = timesOn[random(4)];lightLED(LEDtoLight, periodLEDisLit);turnOffLEDs();int delayTime = delayTimes[random(4)];delay(delayTime);if(isWinner){
isWinner =false;winner();}}voidlightLED(int led,int duration){switch(led){case1://greendigitalWrite(greenLED, HIGH);break;case2:// reddigitalWrite(redLED, HIGH);break;case3:// yellowdigitalWrite(yellowLED, HIGH);break;default:break;}delay(duration);
redLEDLit =false;}voidturnOffLEDs(){digitalWrite(greenLED, LOW);digitalWrite(redLED, LOW);digitalWrite(yellowLED, LOW);}voidwinner(){for(int i=0; i<3; i++){digitalWrite(greenLED, HIGH);digitalWrite(redLED, HIGH);digitalWrite(yellowLED, HIGH);delay(250);digitalWrite(greenLED, LOW);digitalWrite(redLED, LOW);digitalWrite(yellowLED, LOW);delay(250);}delay(3000);}// ISRvoidcheckWinner(){if(redLEDLit){
Serial.println("win");
isWinner =true;}}