//Rock - Paper - Scissors Desk Toy //Running on Adafruit Pro Trinket //Created by: Jonathan Bush //Updated: 10-19-2015 //pitches for tone #define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 #define NOTE_D1 37 #define NOTE_DS1 39 #define NOTE_E1 41 #define NOTE_F1 44 #define NOTE_FS1 46 #define NOTE_G1 49 #define NOTE_GS1 52 #define NOTE_A1 55 #define NOTE_AS1 58 #define NOTE_B1 62 #define NOTE_C2 65 #define NOTE_CS2 69 #define NOTE_D2 73 #define NOTE_DS2 78 #define NOTE_E2 82 #define NOTE_F2 87 #define NOTE_FS2 93 #define NOTE_G2 98 #define NOTE_GS2 104 #define NOTE_A2 110 #define NOTE_AS2 117 #define NOTE_B2 123 #define NOTE_C3 131 #define NOTE_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 #define NOTE_FS3 185 #define NOTE_G3 196 #define NOTE_GS3 208 #define NOTE_A3 220 #define NOTE_AS3 233 #define NOTE_B3 247 #define NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349 #define NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 466 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_CS5 554 #define NOTE_D5 587 #define NOTE_DS5 622 #define NOTE_E5 659 #define NOTE_F5 698 #define NOTE_FS5 740 #define NOTE_G5 784 #define NOTE_GS5 831 #define NOTE_A5 880 #define NOTE_AS5 932 #define NOTE_B5 988 #define NOTE_C6 1047 #define NOTE_CS6 1109 #define NOTE_D6 1175 #define NOTE_DS6 1245 #define NOTE_E6 1319 #define NOTE_F6 1397 #define NOTE_FS6 1480 #define NOTE_G6 1568 #define NOTE_GS6 1661 #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_DS7 2489 #define NOTE_E7 2637 #define NOTE_F7 2794 #define NOTE_FS7 2960 #define NOTE_G7 3136 #define NOTE_GS7 3322 #define NOTE_A7 3520 #define NOTE_AS7 3729 #define NOTE_B7 3951 #define NOTE_C8 4186 #define NOTE_CS8 4435 #define NOTE_D8 4699 #define NOTE_DS8 4978 //end of pitches def #define blank_analog A6 #define btn_pin A5 #define player_rock 18 #define player_paper 17 #define player_scissors 16 #define player_lizard 15 #define player_spock 14 #define comp_rock 13 #define comp_paper 12 #define comp_scissors 11 #define comp_lizard 10 #define comp_spock 9 #define player1pt 0 #define player2pt 1 #define player3pt 3 #define comp1pt 4 #define comp2pt 5 #define comp3pt 6 #define sAudioPin 8 int buttonVal = 0; int player_choice = 0; int rock_btn_val_low = 928; int rock_btn_val_high = 936; int paper_btn_val_low = 940; int paper_btn_val_high = 950; int scis_btn_val_low = 965; int scis_btn_val_high = 972; int liz_btn_val_low = 980; int liz_btn_val_high = 989; int spock_btn_val_low = 998; int spock_btn_val_high = 1005; int comp_choice = 0; int comp_score = 0; int player_score = 0; int player_wins = 0; int comp_wins = 0; int tie_throw = 0; int blink_delay = 1000; int NOTE_SUSTAIN = 50; void setup(){ for(int i = 0; i < 2; i++){ pinMode(i,OUTPUT);} for(int i = 3; i < 7; i++){ pinMode(i,OUTPUT);} for(int i = 8; i < 19; i++){ pinMode(i,OUTPUT);} } void loop(){ buttonVal = analogRead(btn_pin); if(buttonVal >= rock_btn_val_low && buttonVal <= rock_btn_val_high){ player_choice = 1; }else if(buttonVal >= paper_btn_val_low && buttonVal <= paper_btn_val_high){ player_choice = 2; }else if(buttonVal >= scis_btn_val_low && buttonVal <= scis_btn_val_high){ player_choice = 3; }else if(buttonVal >= liz_btn_val_low && buttonVal <= liz_btn_val_high){ player_choice = 4; }else if(buttonVal >= spock_btn_val_low && buttonVal <= spock_btn_val_high){ player_choice = 5; }else{ player_choice = 0; } if(player_choice > 0){ //randomSeed(analogRead(blank_analog)); randomSeed(analogRead(millis())); comp_choice = random(1,6); }else{ comp_choice = 0; } if(comp_choice > 0){ if(player_choice == 1 && comp_choice == 1){ digitalWrite(player_rock,HIGH); digitalWrite(comp_rock,HIGH); delay(blink_delay); digitalWrite(player_rock,LOW); digitalWrite(comp_rock,LOW); delay(blink_delay); digitalWrite(player_rock,HIGH); digitalWrite(comp_rock,HIGH); tie(); }else if(player_choice == 2 && comp_choice == 2){ digitalWrite(player_paper,HIGH); digitalWrite(comp_paper,HIGH); delay(blink_delay); digitalWrite(player_paper,LOW); digitalWrite(comp_paper,LOW); delay(blink_delay); digitalWrite(player_paper,HIGH); digitalWrite(comp_paper,HIGH); tie(); }else if(player_choice == 3 && comp_choice == 3){ digitalWrite(player_scissors,HIGH); digitalWrite(comp_scissors,HIGH); delay(blink_delay); digitalWrite(player_scissors,LOW); digitalWrite(comp_scissors,LOW); delay(blink_delay); digitalWrite(player_scissors,HIGH); digitalWrite(comp_scissors,HIGH); tie(); }else if(player_choice == 4 && comp_choice == 4){ digitalWrite(player_lizard,HIGH); digitalWrite(comp_lizard,HIGH); delay(blink_delay); digitalWrite(player_lizard,LOW); digitalWrite(comp_lizard,LOW); delay(blink_delay); digitalWrite(player_lizard,HIGH); digitalWrite(comp_lizard,HIGH); tie(); }else if(player_choice == 5 && comp_choice == 5){ digitalWrite(player_spock,HIGH); digitalWrite(comp_spock,HIGH); delay(blink_delay); digitalWrite(player_spock,LOW); digitalWrite(comp_spock,LOW); delay(blink_delay); digitalWrite(player_spock,HIGH); digitalWrite(comp_spock,HIGH); tie(); }else if(player_choice == 1 && comp_choice == 2){ digitalWrite(player_rock,HIGH); digitalWrite(comp_paper,HIGH); delay(blink_delay); digitalWrite(comp_paper,LOW); delay(blink_delay); digitalWrite(comp_paper,HIGH); comp(); }else if(player_choice == 1 && comp_choice == 3){ digitalWrite(comp_scissors,HIGH); digitalWrite(player_rock,HIGH); delay(blink_delay); digitalWrite(player_rock,LOW); delay(blink_delay); digitalWrite(player_rock,HIGH); player(); }else if(player_choice == 1 && comp_choice == 4){ digitalWrite(comp_lizard,HIGH); digitalWrite(player_rock,HIGH); delay(blink_delay); digitalWrite(player_rock,LOW); delay(blink_delay); digitalWrite(player_rock,HIGH); player(); }else if(player_choice == 1 && comp_choice == 5){ digitalWrite(player_rock,HIGH); digitalWrite(comp_spock,HIGH); delay(blink_delay); digitalWrite(comp_spock,LOW); delay(blink_delay); digitalWrite(comp_spock,HIGH); comp(); }else if(player_choice == 2 && comp_choice == 1){ digitalWrite(comp_rock,HIGH); digitalWrite(player_paper,HIGH); delay(blink_delay); digitalWrite(player_paper,LOW); delay(blink_delay); digitalWrite(player_paper,HIGH); player(); }else if(player_choice == 2 && comp_choice == 3){ digitalWrite(player_paper,HIGH); digitalWrite(comp_scissors,HIGH); delay(blink_delay); digitalWrite(comp_scissors,LOW); delay(blink_delay); digitalWrite(comp_scissors,HIGH); comp(); }else if(player_choice == 2 && comp_choice == 4){ digitalWrite(player_paper,HIGH); digitalWrite(comp_lizard,HIGH); delay(blink_delay); digitalWrite(comp_lizard,LOW); delay(blink_delay); digitalWrite(comp_lizard,HIGH); comp(); }else if(player_choice == 2 && comp_choice == 5){ digitalWrite(comp_spock,HIGH); digitalWrite(player_paper,HIGH); delay(blink_delay); digitalWrite(player_paper,LOW); delay(blink_delay); digitalWrite(player_paper,HIGH); player(); }else if(player_choice == 3 && comp_choice == 1){ digitalWrite(player_scissors,HIGH); digitalWrite(comp_rock,HIGH); delay(blink_delay); digitalWrite(comp_rock,LOW); delay(blink_delay); digitalWrite(comp_rock,HIGH); comp(); }else if(player_choice == 3 && comp_choice == 2){ digitalWrite(comp_paper,HIGH); digitalWrite(player_scissors,HIGH); delay(blink_delay); digitalWrite(player_scissors,LOW); delay(blink_delay); digitalWrite(player_scissors,HIGH); player(); }else if(player_choice == 3 && comp_choice == 4){ digitalWrite(comp_lizard,HIGH); digitalWrite(player_scissors,HIGH); delay(blink_delay); digitalWrite(player_scissors,LOW); delay(blink_delay); digitalWrite(player_scissors,HIGH); player(); }else if(player_choice == 3 && comp_choice == 5){ digitalWrite(player_scissors,HIGH); digitalWrite(comp_spock,HIGH); delay(blink_delay); digitalWrite(comp_spock,LOW); delay(blink_delay); digitalWrite(comp_spock,HIGH); comp(); }else if(player_choice == 4 && comp_choice == 1){ digitalWrite(player_lizard,HIGH); digitalWrite(comp_rock,HIGH); delay(blink_delay); digitalWrite(comp_rock,LOW); delay(blink_delay); digitalWrite(comp_rock,HIGH); comp(); }else if(player_choice == 4 && comp_choice == 2){ digitalWrite(comp_paper,HIGH); digitalWrite(player_lizard,HIGH); delay(blink_delay); digitalWrite(player_lizard,LOW); delay(blink_delay); digitalWrite(player_lizard,HIGH); player(); }else if(player_choice == 4 && comp_choice == 3){ digitalWrite(player_lizard,HIGH); digitalWrite(comp_scissors,HIGH); delay(blink_delay); digitalWrite(comp_scissors,LOW); delay(blink_delay); digitalWrite(comp_scissors,HIGH); comp(); }else if(player_choice == 4 && comp_choice == 5){ digitalWrite(comp_spock,HIGH); digitalWrite(player_lizard,HIGH); delay(blink_delay); digitalWrite(player_lizard,LOW); delay(blink_delay); digitalWrite(player_lizard,HIGH); player(); }else if(player_choice == 5 && comp_choice == 1){ digitalWrite(comp_rock,HIGH); digitalWrite(player_spock,HIGH); delay(blink_delay); digitalWrite(player_spock,LOW); delay(blink_delay); digitalWrite(player_spock,HIGH); player(); }else if(player_choice == 5 && comp_choice == 2){ digitalWrite(player_spock,HIGH); digitalWrite(comp_paper,HIGH); delay(blink_delay); digitalWrite(comp_paper,LOW); delay(blink_delay); digitalWrite(comp_paper,HIGH); comp(); }else if(player_choice == 5 && comp_choice == 3){ digitalWrite(comp_scissors,HIGH); digitalWrite(player_spock,HIGH); delay(blink_delay); digitalWrite(player_spock,LOW); delay(blink_delay); digitalWrite(player_spock,HIGH); player(); }else if(player_choice == 5 && comp_choice == 4){ digitalWrite(player_spock,HIGH); digitalWrite(comp_lizard,HIGH); delay(blink_delay); digitalWrite(comp_lizard,LOW); delay(blink_delay); digitalWrite(comp_lizard,HIGH); comp(); } } digitalWrite(player_rock,LOW); digitalWrite(player_paper,LOW); digitalWrite(player_scissors,LOW); digitalWrite(player_lizard,LOW); digitalWrite(player_spock,LOW); digitalWrite(comp_rock,LOW); digitalWrite(comp_paper,LOW); digitalWrite(comp_scissors,LOW); digitalWrite(comp_lizard,LOW); digitalWrite(comp_spock,LOW); if(player_wins == 1){ player_score = player_score + 1; player_wins = 0; } if(comp_wins == 1){ comp_score = comp_score + 1; comp_wins = 0; } if(player_score == 2){ digitalWrite(player1pt,HIGH); digitalWrite(player2pt,HIGH); }else if(player_score == 1){ digitalWrite(player1pt,HIGH); } if(comp_score == 2){ digitalWrite(comp1pt,HIGH); digitalWrite(comp2pt,HIGH); }else if(comp_score == 1){ digitalWrite(comp1pt,HIGH); } if(player_score == 3){ digitalWrite(player1pt,HIGH); digitalWrite(player2pt,HIGH); digitalWrite(player3pt,HIGH); delay(blink_delay); digitalWrite(player1pt,LOW); digitalWrite(player2pt,LOW); digitalWrite(player3pt,LOW); delay(blink_delay); digitalWrite(player1pt,HIGH); digitalWrite(player2pt,HIGH); digitalWrite(player3pt,HIGH); winner(); delay(1000); } if(comp_score == 3){ digitalWrite(comp1pt,HIGH); digitalWrite(comp2pt,HIGH); digitalWrite(comp3pt,HIGH); delay(blink_delay); digitalWrite(comp1pt,LOW); digitalWrite(comp2pt,LOW); digitalWrite(comp3pt,LOW); delay(blink_delay); digitalWrite(comp1pt,HIGH); digitalWrite(comp2pt,HIGH); digitalWrite(comp3pt,HIGH); loser(); delay(1000); } if(comp_score == 3 || player_score == 3){ player_score = 0; comp_score = 0; for(int i = 0; i < 2; i++){ digitalWrite(i,LOW);} for(int i = 3; i < 7; i++){ digitalWrite(i,LOW);} for(int i = 8; i < 18; i++){ digitalWrite(i,LOW);} } } void player(){ player_wins = 1; delay(blink_delay); } void comp(){ comp_wins = 1; delay(blink_delay); } void tie(){ tie_throw = 1; delay(blink_delay); } void winner(){ delay(10); //placeholder - need to input winner's tone for(uint8_t nLoop = 0;nLoop < 2;nLoop ++) { tone(sAudioPin,NOTE_A5); delay(NOTE_SUSTAIN); tone(sAudioPin,NOTE_B5); delay(NOTE_SUSTAIN); tone(sAudioPin,NOTE_C5); delay(NOTE_SUSTAIN); tone(sAudioPin,NOTE_B5); delay(NOTE_SUSTAIN); tone(sAudioPin,NOTE_C5); delay(NOTE_SUSTAIN); tone(sAudioPin,NOTE_D5); delay(NOTE_SUSTAIN); tone(sAudioPin,NOTE_C5); delay(NOTE_SUSTAIN); tone(sAudioPin,NOTE_D5); delay(NOTE_SUSTAIN); tone(sAudioPin,NOTE_E5); delay(NOTE_SUSTAIN); tone(sAudioPin,NOTE_D5); delay(NOTE_SUSTAIN); tone(sAudioPin,NOTE_E5); delay(NOTE_SUSTAIN); tone(sAudioPin,NOTE_E5); delay(NOTE_SUSTAIN); } noTone(sAudioPin); } void loser(){ delay(10); //placeholder - need to input sad, loser's tone tone(sAudioPin,NOTE_G4); delay(250); tone(sAudioPin,NOTE_C4); delay(500); noTone(sAudioPin); } /*void flash_led(int x){ for(int z = 1; z < 5; z++){ digitalWrite(x,HIGH); delay(blink_delay); digitalWrite(x,LOW); delay(blink_delay); } } */