#include Servo servo1; int degrees = 90; // Servo degrees int servoPin = 9; // Pin for the Servo boolean stateP1; // State of push button Player 1 boolean stateP2; // State of push button Player 1 int rep1 = 0; // Variable for first For loop int rep2 = 0; // Variable for second For loop int randNum = 0; // Random Number int time = 0; // Running time 1 int time2 = 0; // Running time 2 int countP1; // Pulse counter P1 int countP2; // Pulse counter P2 int freqGame = 1000; // Time LEDs are off int freqLed = 500; // Time LED are on //Pins for the LEDs in the game int pinLedGeneral = 3; int pinLedErrorP1 = 4; int pinLedErrorP2 = 5; int pinLedCorrectP1 = 6; int pinLedCorrectP2 = 7; int pinLedP1 = 8; int pinLedP2 = 10; int buttonP1 = 11; int buttonP2 = 12; void setup() { servo1.attach(servoPin); // Make servoPin Servo servo1.write(0); // Send it to 0 degrees delay(800); // Give it time to get there servo1.write(179); // Send it to degree 179 delay(800); servo1.write(degrees); // Take it to original position //Set Pin Configuration pinMode(pinLedGeneral, OUTPUT); pinMode(pinLedErrorP1, OUTPUT); pinMode(pinLedErrorP2, OUTPUT); pinMode(pinLedCorrectP1, OUTPUT); pinMode(pinLedCorrectP2, OUTPUT); pinMode(pinLedP1, OUTPUT); pinMode(pinLedP2, OUTPUT); pinMode(buttonP1, INPUT); pinMode(buttonP2, INPUT); } void loop() { randNum = random(0, 99); // Generate random number time = millis(); // Store time countP1 = 0; countP2 = 0; // Make sure the speed of the game is not too high if (freqGame < 50) { Winner(); } // Make times shorter freqGame = (freqGame - 10); freqLed = (freqLed - 4); // Switch on LED and check to see if the // correct player pushes his button while it's on while ((time2 - time) <= freqLed) { time2 = millis(); if ((randNum % 2) == 0) // Led Player 1 { digitalWrite(pinLedP1, HIGH); digitalWrite(pinLedP2, LOW); stateP1 = digitalRead(buttonP1); stateP2 = digitalRead(buttonP2); if ((stateP1 == true) & (countP1 == 0)) { RightP1(); } if ((stateP2 == true) & (countP2 == 0)) { P2Error(); } } else // Led Player 2 { digitalWrite(pinLedP1, LOW); digitalWrite(pinLedP2, HIGH); stateP1 = digitalRead(buttonP1); stateP2 = digitalRead(buttonP2); if ((stateP2 == true) & (countP2 == 0)) { RightP2(); } if ((stateP1 == true) & (countP1 == 0)) { P1Error(); } } } // Switch LEDs off digitalWrite(pinLedP1, LOW); digitalWrite(pinLedP2, LOW); //Check nobody presses while they're off time = millis(); while ((time2 - time) <= freqGame) { time2 = millis(); stateP1 = digitalRead(buttonP1); stateP2 = digitalRead(buttonP2); if ((stateP1 == true) & (countP1 == 0)) { P1Error(); } if ((stateP2 == true) & (countP2 == 0)) { P2Error(); } } } // Check if P1 has one void Player1Wins() { if (degrees == 170) { digitalWrite(pinLedCorrectP1, HIGH); digitalWrite(pinLedCorrectP2, LOW); digitalWrite(pinLedErrorP1, LOW); digitalWrite(pinLedErrorP2, LOW); Winner(); } } void Player2Wins() { if (degrees == 10) { digitalWrite(pinLedCorrectP1, LOW); digitalWrite(pinLedCorrectP2, HIGH); digitalWrite(pinLedErrorP1, LOW); digitalWrite(pinLedErrorP2, LOW); Winner(); } } // P1 presses correctly void RightP1() { countP1++; degrees = (degrees + 10); servo1.write(degrees); digitalWrite(pinLedErrorP1, LOW); digitalWrite(pinLedCorrectP1, HIGH); Player1Wins(); } void RightP2() { countP2++; degrees = (degrees - 10); servo1.write(degrees); digitalWrite(pinLedErrorP2, LOW); digitalWrite(pinLedCorrectP2, HIGH); Player2Wins(); } // P1 presses incorrectly void P1Error() { countP1++; degrees = (degrees - 10); servo1.write(degrees); digitalWrite(pinLedCorrectP1, LOW); digitalWrite(pinLedErrorP1, HIGH); Player2Wins(); } void P2Error() { countP2++; degrees = (degrees + 10); servo1.write(degrees); digitalWrite(pinLedCorrectP2, LOW); digitalWrite(pinLedErrorP2, HIGH); Player1Wins(); } // There's a winner! void Winner() { for (rep1=0; rep1<3; rep1++) { servo1.write(0); for (rep2=10; rep2<250; rep2++) { analogWrite(pinLedGeneral, rep2); delay(3); } servo1.write(179); for (rep2=250; rep2>10; rep2--) { analogWrite(pinLedGeneral, rep2); delay(3); } } digitalWrite(pinLedCorrectP1, LOW); digitalWrite(pinLedCorrectP2, LOW); digitalWrite(pinLedErrorP1, LOW); digitalWrite(pinLedErrorP2, LOW); digitalWrite(pinLedGeneral, LOW); degrees = (90); servo1.write(degrees); delay(5000); freqGame = 100; freqLed = 500; }