/* Code by Brittany Craig 4-12-2016 This program runs two games: One Player Pong and Two Player Pong. Both games use LEDs and a push button for the game. One Player: The 6 LEDs closest to button 2 alternate back and forth and the button must be pushed within a given time once the closest LED lights up. To start the game, the button must be pushed. Scoring: A point is earned every time the button is successfully pushed. If the player misses, the scoring starts over. The high score is recorded. Two Player: All 10 LEDs alternate back and forth and each player must push their button within a given time once the closest LED to them lights up. Scoring: A player earns a point when the opposing player misses their button. */ // initialize LEDs const int LED1=22; const int LED2=24; const int LED3=26; const int LED4=28; const int LED5=30; const int LED6=32; const int LED7=34; const int LED8=36; const int LED9=38; const int LED10=40; // initialize Buttons const int BUTTON1=42; const int BUTTON2=44; int delayTime; // delay time between each LED int startTime; // start time when the last LED is turned on int elapsedTime; // time between LED on and button pressed int score1; // score for player 1 int score2; // score for player 2 int game; // decides if the game should continue or not. // Set to 1 if player hit the button, // set to 2 if player did not hit the button. int lastWin; // keeps track of last win to determine who starts next round int highScore; // holds high schore for one player game void setup() { // initialize LED's pinMode(LED1,OUTPUT); pinMode(LED2,OUTPUT); pinMode(LED3,OUTPUT); pinMode(LED4,OUTPUT); pinMode(LED5,OUTPUT); pinMode(LED6,OUTPUT); pinMode(LED7,OUTPUT); pinMode(LED8,OUTPUT); pinMode(LED9,OUTPUT); pinMode(LED10,OUTPUT); // initialize scores to 0 score1=0; score2=0; highScore=0; // initialize to start 2 player game game=1; lastWin=1; Serial.begin(9600); } // end setup void loop() { /* To play one player, comment out playTwoPlayerPong(), to play two player, comment out playOnePlayerPong() */ // playOnePlayerPong(); playTwoPlayerPong(); } //end loop // ************************************************************************************************ void playOnePlayerPong() { delayTime = 300; // set initial delayTime // begin once the button is pushed while(digitalRead(BUTTON2)==HIGH){} while(game == 1) { // go through LEDs digitalWrite(LED9,HIGH); delay(delayTime); digitalWrite(LED9,LOW); digitalWrite(LED8,HIGH); delay(delayTime); digitalWrite(LED8,LOW); digitalWrite(LED7,HIGH); delay(delayTime); digitalWrite(LED7,LOW); digitalWrite(LED6,HIGH); delay(delayTime); digitalWrite(LED6,LOW); digitalWrite(LED5,HIGH); delay(delayTime); digitalWrite(LED5,LOW); /* digitalWrite(LED4,HIGH); delay(delayTime); digitalWrite(LED4,LOW); digitalWrite(LED3,HIGH); delay(delayTime); digitalWrite(LED3,LOW); digitalWrite(LED2,HIGH); delay(delayTime); digitalWrite(LED2,LOW); digitalWrite(LED3,HIGH); delay(delayTime); digitalWrite(LED3,LOW); digitalWrite(LED4,HIGH); delay(delayTime); digitalWrite(LED4,LOW); digitalWrite(LED5,HIGH); delay(delayTime); digitalWrite(LED5,LOW); */ digitalWrite(LED6,HIGH); delay(delayTime); digitalWrite(LED6,LOW); digitalWrite(LED7,HIGH); delay(delayTime); digitalWrite(LED7,LOW); digitalWrite(LED8,HIGH); delay(delayTime); digitalWrite(LED8,LOW); digitalWrite(LED9,HIGH); delay(delayTime); digitalWrite(LED9,LOW); game=2; // assume player will miss if(digitalRead(BUTTON2)==HIGH) {// if button is not pushed before LED turns on, digitalWrite(LED10,HIGH); startTime = millis(); // use internal clock to track time elapsedTime = 0; // start timer while(elapsedTime < 100) {// allow player 100ms to push button // once the LED is lit elapsedTime = millis() - startTime; if(digitalRead(BUTTON2)==LOW) { // if button is pushed, game=1; //game can continue score2++; // add a point elapsedTime=1000; // exit while loop }// end if(button low) }// end while }// end if(button high) delay(delayTime); digitalWrite(LED10,LOW); if(game==2) {// if player missed blink(LED10); // blink to announce loss }// end if // otherwise increase speed by 25 ms if(delayTime>100) { delayTime=delayTime-25; } else { delayTime = 100; } }// end while(game=1) // if button was not pushed, game=1; // reset to continue game, printScores(); // print score score2=0; // reset score }// end playOnePlayerPong void printScores() { // for one player pong Serial.println(); Serial.print("Your score: "); Serial.println(score2); if(score2>highScore){ highScore = score2; } Serial.print("High score: "); Serial.println(highScore); Serial.println(); } // ****************************************************************************************** void playTwoPlayerPong() { delayTime=300; // initialize beginning delay time if(lastWin == 1) { // player 1 starts while(game==1) {// continue until someone loses runPlayerOne(); if(game ==1) {// if player 1 hit the button, runPlayerTwo(); } // increase LED speed if(delayTime>100) { delayTime=delayTime-50; } else { delayTime = 100; } }// end while } if(lastWin == 2) { // player 2 starts while(game==1) { // continue until someone loses runPlayerTwo(); if(game ==1) {// if player 2 hit the button, runPlayerOne(); } // increase LED speed if(delayTime>100) { delayTime=delayTime-50; } else { delayTime = 100; } }// end while } game=1; // reset for next round printScore(); delay(2000); } void runPlayerOne() { // go through LEDs digitalWrite(LED9,HIGH); delay(delayTime); digitalWrite(LED9,LOW); digitalWrite(LED8,HIGH); delay(delayTime); digitalWrite(LED8,LOW); digitalWrite(LED7,HIGH); delay(delayTime); digitalWrite(LED7,LOW); digitalWrite(LED6,HIGH); delay(delayTime); digitalWrite(LED6,LOW); digitalWrite(LED5,HIGH); delay(delayTime); digitalWrite(LED5,LOW); digitalWrite(LED4,HIGH); delay(delayTime); digitalWrite(LED4,LOW); digitalWrite(LED3,HIGH); delay(delayTime); digitalWrite(LED3,LOW); digitalWrite(LED2,HIGH); delay(delayTime); digitalWrite(LED2,LOW); game=2; // assume play will miss if(digitalRead(BUTTON1)==HIGH) { // if the button is not pressed before the LED is on, digitalWrite(LED1,HIGH); startTime = millis(); elapsedTime = 0; while(elapsedTime < 100) { // player must press button within 100ms elapsedTime = millis()-startTime; if(digitalRead(BUTTON1)==LOW) { //button pressed game=1; // game will resume elapsedTime = 1000; // set high enough to exit while loop }// end if(button low) }// end while }// end if(button high) delay(delayTime); digitalWrite(LED1,LOW); if(game==2) { // if button was not pressed, lastWin = 2; score2++; // player 2 gets a point blink(LED1); // led blinks to announce loss } }// end runPlayerOne void runPlayerTwo() { // go through LEDs digitalWrite(LED2,HIGH); delay(delayTime); digitalWrite(LED2,LOW); digitalWrite(LED3,HIGH); delay(delayTime); digitalWrite(LED3,LOW); digitalWrite(LED4,HIGH); delay(delayTime); digitalWrite(LED4,LOW); digitalWrite(LED5,HIGH); delay(delayTime); digitalWrite(LED5,LOW); digitalWrite(LED6,HIGH); delay(delayTime); digitalWrite(LED6,LOW); digitalWrite(LED7,HIGH); delay(delayTime); digitalWrite(LED7,LOW); digitalWrite(LED8,HIGH); delay(delayTime); digitalWrite(LED8,LOW); digitalWrite(LED9,HIGH); delay(delayTime); digitalWrite(LED9,LOW); game=2; // assume player will miss if(digitalRead(BUTTON2)==HIGH) {// if button is not pressed before LED is on, digitalWrite(LED10,HIGH); startTime = millis(); elapsedTime = 0; while(elapsedTime < 100) {// player has 100 ms to push button elapsedTime = millis() - startTime; if(digitalRead(BUTTON2)==LOW) { // if button is pushed, game=1; // game continues elapsedTime=1000; // set high enough to escape while loop }// end if(button low) }// end while }// end if(button high) delay(delayTime); digitalWrite(LED10,LOW); if(game==2) {// if button was not pushed, lastWin = 1; score1++; // player 1 gets a point blink(LED10); // blink led to announce loss } } // end runPlayerTwo void printScore() { // Prints the scores of each player Serial.println(); Serial.println("SCORE"); Serial.print("Player 1: "); Serial.println(score1); Serial.print("Player 2: "); Serial.println(score2); Serial.println(); } // ****************************************************************************************** void blink(int LED) { // blinks input LED 5 times for(int i = 0; i < 5; i++) { digitalWrite(LED,HIGH); delay(100); digitalWrite(LED, LOW); delay(100); } }