ButtonMasherz

Zachary Bustamante and Sean Vichinsky

ButtonMasherz

This game pits two opponents against each other in a battle of quick reflexes. Each person has a button that they must press fifty times. The first person to press their button fifty times wins the game and proves his worth. The game is accompanied with a monitor that tracks progress and a speaker that notes when a player has reached the end, as well as every ten button presses.

The button is hooked up to the Arduino board, which tracks the button and notes each time it's pressed. When the button is pressed, the Arduino increases a variable called "buttonPresses" ("otherbuttonPresses" for P2) by one. It is the (other)buttonPresses variable that tracks the overall score. Every ten button presses, a few different things happen. First, one of the lights on that person's side will light up. Second, the speaker will play a brief tone that increases with pitch for every tenth button press. Finally, the monitor will display a message that indicates that person's progress, such as, "PLAYER ONE IS BLAZING OFF" or "PLAYER TWO IS ALMOST THERE." When one

player gets to fifty button presses, an eight tone melody will play, and the monitor will display the message, "PLAYER 1/2 WINS!". Additionally, the lights of the losing player will shut off, to let that player know how much he has failed at everything in life.

Below is the pitches.h file, followed by the file for the game itself

____

/*************************************************

* Public Constants

*************************************************/

/*************************************************

* Public Constants

*************************************************/

#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

____

#include "pitches.h" // includes the sound files needed for the speaker

#include <SoftwareSerial.h> //includes files needed for speaker

int Pin = 15; //establishes Player One's button as Pin 15

int otherPin = 12; // establishes Plaer Two's button as Pin 12

int ledone = 2; //establishes Player One's first light as Pin 2

int ledtwo = 3; //establishes Player One's second light as Pin 3

int ledthree = 4; //establishes Player One's third light as Pin 4

int ledfour = 5; //establishes Player One's fourth light as Pin 5

int ledfive = 6; //establishes Player One's victory light as Pin 6

int ledsix = 7; //establishes Player Two's victory light as Pin 7

int ledseven = 8; //establishes Player Two's fourth light as Pin 8

int ledeight = 9; //establishes Player Two's third light as Pin 9

int lednine = 10; //establishes Player Two's second light as Pin 10

int ledten = 11; //establishes Player Two's first light as Pin 11

int x = 1; //establishes the "x" variable as 1

int y = 1; //establishes the "y" variable as 1

int val; //establishes Player One's "val" as an open variable

int buttonState; //establishes the open variable for Player One's buttonstate

int valt; //establishes Playe Two's "val" as an open variable

int buttonStatet; //establishes the open variable for Player Two's buttonstate

int buttonPresses = 0; //establishes Player One's "Score" as zero

int otherbuttonPresses = 0; //establishes Player Two's "score" as zero

int sensorReading = analogRead(A0); //begin looking for serial signal from pin A0

SoftwareSerial mySerial(17,16); //establishes Speaker's pins as 17 and 16

int melody [] = { //begin playing the opening melody

NOTE_A4, NOTE_B4, NOTE_C5, NOTE_A4, NOTE_DS5 }; //notes for the melody

int noteDurations[] = { //play each note for a cerain amount of time

1,4,2,2,1}; //whole note, quarter note, half note, half note, whole note

void setup () { //begin void setup

for (int thisNote = 0; thisNote < 5; thisNote++) { //sets up variables for the melody

int noteDuration = 1000/noteDurations[thisNote]; //translates note lengths into seconds

tone (14, melody [thisNote],noteDuration); // play melody from pin 14

delay(noteDuration+30); // delay each note by 30 milliseconds

}

pinMode(Pin, INPUT); //establishes Player One's button as an input

pinMode(otherPin, INPUT); //establishes Player Two's button as an input

pinMode(ledone, OUTPUT); //establishes Player One's first light as an output

pinMode(ledtwo, OUTPUT); //establishes Player One's second light as an output

pinMode(ledthree, OUTPUT); //establishes Player One's third light as an output

pinMode(ledfour, OUTPUT); //establishes Player One's fourth lught as an output

pinMode(ledfive, OUTPUT); //establishes Player One's victory light as an output

pinMode(ledsix, OUTPUT); //establishes Player Two's victory light as an output

pinMode(ledseven, OUTPUT); //establishes Player Two's fourth light as an output

pinMode(ledeight, OUTPUT); //establishes Player Two's third light as an output

pinMode(lednine, OUTPUT); //establishes Player Two's second light as an output

pinMode(ledten, OUTPUT); //establishes Player Two's first light as an output

Serial.begin(9600); //begin serial communication at 9600

buttonState = digitalRead(Pin); //read the state of Player One's button

buttonStatet = digitalRead(otherPin); //read the state of Player Two's button

for (int ledfive = 6, ledsix = 7; ledfive >= 1, ledsix <= 11; ledfive = ledfive-1, ledsix = ledsix+1){ // begin the countdown

pinMode(ledfive, OUTPUT); //establishes Player One's first light as an output

digitalWrite(ledfive, HIGH); //turn on Player One's victory light for countdown

digitalWrite(ledsix, HIGH); //turn on Player Two's victory light for countdown

delay(500); // wait 500 milliseconds

digitalWrite(ledfive, LOW); //turn off Player One's victory light

digitalWrite(ledsix, LOW); //turn off PLayer Two's victory light

}

}

void loop ()

{

val = digitalRead(Pin); //begin the void loop function

valt = digitalRead(otherPin); //constantly read the state of Player Two's button

if (val != buttonState) //if the button is on

{

if (val == HIGH) { //if the button has been pushed

buttonPresses++; //increase Player One's "score" by 1 point

}

}

buttonState = val; // read the state of Playe One's button

if (valt != buttonStatet) { // If Player Two's button is on

if (valt == HIGH) { //if Player Two's button has been pushed

otherbuttonPresses++; //increase Player Two's "score" by 1 point

}

}

buttonStatet = valt; // constantly read the state of Player Two's button

if (buttonPresses == 10) //if Player One's score is at 10 points

{

digitalWrite(ledone, HIGH); //turn on Player One's first light

tone (14, NOTE_A4, 200); //play the note that signifies a light has been turned on

mySerial.write(254); //set up printing to the monitor

mySerial.write(128); //set up printing to the monitor

mySerial.write(" "); //clear the screen

mySerial.write(" "); //clear the screen

mySerial.write(254); //set up printing to the monitor

mySerial.write(128); //set up printing to the monitor

mySerial.write("Player One is "); //Print a message to the monitor

mySerial.write("blazing off! "); //Print a message to the monitor

}

if (buttonPresses == 20) //if Player One's score is at least twenty

{

tone (14, NOTE_B4,200); //play the note that signifies a light has been turned on

digitalWrite(ledone, HIGH); //turn on Player One's first light

digitalWrite(ledtwo, HIGH); //turn on Player Two's second light

mySerial.write(254); //set up printing to the monitor

mySerial.write(128); //set up printing to the monitor

mySerial.write(" "); //clear the screen

mySerial.write(" "); //clear the screen

mySerial.write(254); //set up printing to the monitor

mySerial.write(128); //set up printing to the monitor

mySerial.write("Player One is "); //Print a message to the monitor

mySerial.write("going hot!"); //Print a message to the monitor

}

if (buttonPresses == 30) //if Player One's score is at least thirty

{

digitalWrite(ledone, HIGH); //turn on Player One's first light

digitalWrite(ledtwo, HIGH); //turn on Player One's second light

digitalWrite(ledthree, HIGH); //turn on Player One's third light

tone (14, NOTE_C5,200); //play the note that signifies a light has been turned on

mySerial.write(254); //set up printing to the monitor

mySerial.write(128); //set up printing to the monitor

mySerial.write(" "); //clear the screen

mySerial.write(" "); //clear the screen

mySerial.write(254); //set up printing to the monitor

mySerial.write(128); //set up printing to the monitor

mySerial.write("Player One is "); //Print a message to the monitor

mySerial.write("getting close!"); //Print a message to the monitor

}

if (buttonPresses == 40) //if Player One's score is at least fourty

{

digitalWrite(ledone, HIGH); //turn on Player One's first light

digitalWrite(ledtwo, HIGH); //turn on Player One's second light

digitalWrite(ledthree, HIGH); //turn on Player One's third light

digitalWrite(ledfour, HIGH); //turn on Player One's fourth light

tone(14, NOTE_D5,200); //play the note that signifies a light has been turned on

mySerial.write(254); //set up printing to the monitor

mySerial.write(128); //set up printing to the monitor

mySerial.write(" "); //clear the screen

mySerial.write(" "); //clear the screen

mySerial.write(254); //set up printing to the monitor

mySerial.write(128); //set up printing to the monitor

mySerial.write("Player One is "); //Print a message to the monitor

mySerial.write("almost there!"); //Print a message to the monitor

}

if (buttonPresses >= 50) //if Player One's score is fifty

{

digitalWrite(ledone, HIGH); //turn on Player One's first light

digitalWrite(ledtwo, HIGH); //turn on Player One's second light

digitalWrite(ledthree, HIGH); //turn on Player One's third light

digitalWrite(ledfour, HIGH); //turn on Player One's fourth light

digitalWrite(ledfive, HIGH); //turn on Player One's victory light

if (y == 1) //if "y" is equal to one

{

int melody [] = { //begin playing the victory melody

NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_F5, NOTE_D5, NOTE_F5, NOTE_E5, }; //notes to the melody

int noteDurations[] = { //play each note for a certain amount of time

4,8,8,8,6,6,6,1.5, }; //quarter note, three eighth notes, three sixth notes, one quarter note, one fifth note

for (int thisNote = 0; thisNote < 8; thisNote++) { //sets up variables for melody

int noteDuration = 1000/noteDurations[thisNote]; //translats notes into seconds

tone (14, melody [thisNote],noteDuration); //play melody from Pin 14

delay(noteDuration+50); //delay each note by 50 milliseconds

}

y = 2; //y now equals 2

}

mySerial.write(254); //set up printing to the monitor

mySerial.write(128); //set up printing to the monitor

mySerial.write(" "); //clear the screen

mySerial.write(" "); //clear the screen

mySerial.write(254); //set up printing to the monitor

mySerial.write(128); //set up printing to the monitor

mySerial.write("Player One Wins! "); //Print a message to the monitor

digitalWrite(ledsix, LOW); //turn off Player Two's victory light

digitalWrite(ledseven, LOW); //turn off Player Two's fourth light

digitalWrite(ledeight, LOW); //turn off PLayer Tow's third light

digitalWrite(lednine, LOW); //turn off Player Two's second light

digitalWrite(ledten, LOW); //turn off Player Two's third light

otherbuttonPresses = 0; //reset Player Two's core to zero

}

if (otherbuttonPresses == 10) //if Player Two's score is at least 10

{

digitalWrite(ledten, HIGH); //turn on Player Two's first light

tone(14, NOTE_A5, 200); //play the note that signifies a light has been turned on

mySerial.write(254); //set up printing to the monitor

mySerial.write(128); //set up printing to the monitor

mySerial.write(" "); //clear the screen

mySerial.write(" "); //clear the screen

mySerial.write(254); //set up printing to the monitor

mySerial.write(128); //set up printing to the monitor

mySerial.write("Player Two is "); //Print a message to the monitor

mySerial.write("blazing off!"); //Print a message to the monitor

}

if (otherbuttonPresses == 20) //if Player Two's "score" is twenty

{

tone(14, NOTE_B5,200); //play the note that signifies a light has been turned on

digitalWrite(ledten, HIGH); //turn on Player Two's first light

digitalWrite(lednine, HIGH); //turn on Player Two's second light

mySerial.write(254); //set up printing to the monitor

mySerial.write(128); //set up printing to the monitor

mySerial.write(" "); //clear the screen

mySerial.write(" "); //clear the screen

mySerial.write(254); //set up printing to the monitor

mySerial.write(128); //set up printing to the monitor

mySerial.write("Player Two is "); //Print a message to the monitor

mySerial.write("going hot!"); //Print a message to the monitor

}

if (otherbuttonPresses == 30) //if Player Two's "Score" is thirty

{

tone(14,NOTE_C6, 200); //play the note that signifies a light has been turned on

digitalWrite(ledten, HIGH); //turn on Player Two's first light

digitalWrite(lednine, HIGH); //turn on Player Two's second light

digitalWrite(ledeight, HIGH); //turn on Player Two's third light

mySerial.write(254); //set up printing to the monitor

mySerial.write(128); //set up printing to the monitor

mySerial.write(" "); //clear the screen

mySerial.write(" "); //clear the screen

mySerial.write(254); //set up printing to the monitor

mySerial.write(128); //set up printing to the monitor

mySerial.write("Player Two is "); //Print a message to the monitor

mySerial.write("getting close!"); //Print a message to the monitor

}

if (otherbuttonPresses == 40) //if Player Two's "score" is fourty

{

tone(14, NOTE_D6, 200); //play the note that signifies a light has been turned on

digitalWrite(ledten, HIGH); //turn on Player Two's first light

digitalWrite(lednine, HIGH); //turn on Player Two's second light

digitalWrite(ledeight, HIGH); //turn on Player Two's third light

digitalWrite(ledseven, HIGH); //turn on Player Two's fourth light

mySerial.write(254); //set up printing to the monitor

mySerial.write(128); //set up printing to the monitor

mySerial.write(" "); //clear the screen

mySerial.write(" "); //clear the screen

mySerial.write(254); //set up printing to the monitor

mySerial.write(128); //set up printing to the monitor

mySerial.write("Player Two is "); //Print a message to the monitor

mySerial.write("almost there!"); //Print a message to the monitor

}

if (otherbuttonPresses >= 50) //if Player Two's score is fifty

{

digitalWrite(ledten, HIGH); //turn on Player Two's first light

digitalWrite(lednine, HIGH); //turn on Player Two's second light

digitalWrite(ledeight, HIGH); //turn on Player Two's third light

digitalWrite(ledseven, HIGH); //turn on Player Two's fourth light

digitalWrite(ledsix, HIGH); //turn on Player Two's victory light

if (x == 1) //if variable x is equal to one

{

int melody [] = { //begin melody

NOTE_E6, NOTE_E6, NOTE_E6, NOTE_E6, NOTE_F6, NOTE_D6, NOTE_F6, NOTE_E6, }; //play these notes as part of the melody

int noteDurations[] = { //play each note for a certain amount of time

4,8,8,8,6,6,6,1.5, }; //quarter note, three eighth notes, three sixth notes, one 1.5/8th note

for (int thisNote = 0; thisNote < 8; thisNote++) { //begin for statement for melody

int noteDuration = 1000/noteDurations[thisNote]; //translate note lengths into seconds

tone (14, melody [thisNote],noteDuration); //play melody on pin 14

delay(noteDuration+50); //delay each note by 50 milliseconds

}

x = 2; //variable x is now equal to 2

}

mySerial.write(254); //set up printing to the monitor

mySerial.write(128); //set up printing to the monitor

mySerial.write(" "); //clear the screen

mySerial.write(" "); //clear the screen

mySerial.write(254); //set up printing to the monitor

mySerial.write(128); //set up printing to the monitor

mySerial.write("Player Two Wins! "); //Print a message to the monitor

digitalWrite(ledone, LOW); //turn off Player One's first light

digitalWrite(ledtwo, LOW); //turn off Player One's second light

digitalWrite(ledthree, LOW); //turn off Player One's third light

digitalWrite(ledfour, LOW); //turn off Player One's fourth light

digitalWrite(ledfive, LOW); //turn off Player One's victory light

buttonPresses = 0; //reset Player One's score back to zero

}

}

There were a multitude of problems that we ran into during the development of this project. With the number of "if" statements that we used, there were so many of the "{" and "}"'s that we had trouble figuring out which ones were actually necessary and which ones only hindered the game. Once we solved that (with some help from Mr. Dickie), we set out to include a speaker into the game. For the most part, this went smoothly, but we had a difficult time deciding which notes would make up the melody. After that came the monitor, which was a late addition to the game. The hardest part about adding the monitor was putting the variables and the Serial.prints in the right place to where they cooperated best with the other processes involved in the programming.

If we had more time, we could've added something else to the game besides the speaker and the monitor. This would include an actual LCD screen that would run graphics instead of messages, and an LCD timer to track Personal Records.