Simon Game - Xylophone Version
by agomes6 in Circuits > Arduino
2067 Views, 13 Favorites, 0 Comments
Simon Game - Xylophone Version
A little game interface I'm making..in essence, it will be the simon game....except much harder and xylophone style :)
(For those who don't know, simon game is the following:
http://www.youtube.com/watch?v=4YhVyt4q5HI)
Materials / tools are pretty straight forward...
I used a laser cutter but you can do it manually
Plywood
Acrylic
Arduino UNO
8 Piezo Sensors
8 LEDS
Temporary code has been implemented, missing sound but that will come soon enough
Quick video, day and night
http://www.youtube.com/watch?v=ZcibT5wFgy4&feature=youtu.be
NOTE: Unless you feel comfortably with coding and playing around with different resistor, I would avise to make this in a larger scale!
Great example: https://www.instructables.com/id/Arduino-Xylophone/ by @audreyobscura
[code]
const int buttonSensor = A5;
int led1 = 5; //LED pins
int led2 = 4;
int led3 = 3;
int led4 = 2;
int turn = 0;
int inputRead = 0;
/*int input2 = LOW;
int input3 = LOW;
int input4 = LOW;*/
int randomArray[50]; //Intentionally long to store up to 100 inputs (doubtful anyone will get this far)
int inputArray[50];
void setup() {
Serial.begin(9600);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
randomSeed(analogRead(0)); //Added to generate "more randomness" with the randomArray for the output function
for (int y=0; y<=99; y++){ //For statement to loop through the output and input functions
output();
input();
}
}
void loop() { //Unused void loop(), though for some reason it doesn't compile without this /shrug
}
void output() { //function for generating the array to be matched by the player
for (int y=turn; y <= turn; y++){ //Limited by the turn variable
Serial.println(""); //Some serial output to follow along
Serial.print("Turn: ");
Serial.print(y);
Serial.println("");
randomArray[y] = random(1, 5); //Assigning a random number (1-4) to the randomArray[y], y being the turn count
for (int x=0; x <= turn; x++){
Serial.print(randomArray[x]);
if (randomArray[x]
== 1) { //if statements to display the stored values in the array
digitalWrite(led1, HIGH);
delay(500);
digitalWrite(led1, LOW);
delay(100);
}
if (randomArray[x]
== 2) {
digitalWrite(led2, HIGH);
delay(500);
digitalWrite(led2, LOW);
delay(100);
}
if (randomArray[x]
== 3) {
digitalWrite(led3, HIGH);
delay(500);
digitalWrite(led3, LOW);
delay(100);
}
if (randomArray[x]
== 4) {
digitalWrite(led4, HIGH);
delay(500);
digitalWrite(led4, LOW);
delay(100);
}
}
}
}
void input() { //Function for allowing user input and checking input against the generated array
for (int x=0; x <= turn;){ //Statement controlled by turn count
/*input1 = digitalRead(switch1);
input2 = digitalRead(switch2);
input3 = digitalRead(switch3);
input4 = digitalRead(switch4);*/
inputRead = analogRead(buttonSensor);
//Serial.println(inputRead);
delay(100);
if (inputRead > 685){ //Checking for button push
digitalWrite(led1, HIGH);
//playTone(1915, 200);//Passes tone value and duration of the tone to the playTone function
delay(200);
digitalWrite(led1, LOW);
inputArray[x] = 1;
delay(50);
Serial.print(" ");
Serial.print(1);
if (inputArray[x] != randomArray[x]) { //Checks value input by user and checks it against
fail(); //the value in the same spot on the generated array
} //The fail function is called if it does not match
x++;
}
if ((inputRead > 600) && (inputRead <680)){
digitalWrite(led2, HIGH);
delay(200);
digitalWrite(led2, LOW);
inputArray[x]
= 2;
delay(50);
Serial.print(" ");
Serial.print(2);
if (inputArray[x]
!= randomArray[x]
) {
fail();
}
x++;
}
if ((inputRead > 535) && (inputRead <590)){
digitalWrite(led3, HIGH);
delay(200);
digitalWrite(led3, LOW);
inputArray[x]
= 3;
delay(50);
Serial.print(" ");
Serial.print(3);
if (inputArray[x]
!= randomArray[x]
) {
fail();
}
x++;
}
if ((inputRead > 400) && (inputRead <525)){
digitalWrite(led4, HIGH);
delay(200);
digitalWrite(led4, LOW);
inputArray[x]
= 4;
delay(50);
Serial.print(" ");
Serial.print(4);
if (inputArray[x]
!= randomArray[x]
) {
fail();
Serial.print("failed");
}
x++;
}
}
delay(500);
turn++; //Increments the turn count, also the last action before starting the output function over again
}
void fail() { //Function used if the player fails to match the sequence
for (int y=0; y<=5; y++){ //Flashes lights for failure
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
delay(200);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
delay(200);
}
delay(500);
turn = -1; //Resets turn value so the game starts over without need for a reset button
}[/code]
(For those who don't know, simon game is the following:
http://www.youtube.com/watch?v=4YhVyt4q5HI)
Materials / tools are pretty straight forward...
I used a laser cutter but you can do it manually
Plywood
Acrylic
Arduino UNO
8 Piezo Sensors
8 LEDS
Temporary code has been implemented, missing sound but that will come soon enough
Quick video, day and night
http://www.youtube.com/watch?v=ZcibT5wFgy4&feature=youtu.be
NOTE: Unless you feel comfortably with coding and playing around with different resistor, I would avise to make this in a larger scale!
Great example: https://www.instructables.com/id/Arduino-Xylophone/ by @audreyobscura
[code]
const int buttonSensor = A5;
int led1 = 5; //LED pins
int led2 = 4;
int led3 = 3;
int led4 = 2;
int turn = 0;
int inputRead = 0;
/*int input2 = LOW;
int input3 = LOW;
int input4 = LOW;*/
int randomArray[50]; //Intentionally long to store up to 100 inputs (doubtful anyone will get this far)
int inputArray[50];
void setup() {
Serial.begin(9600);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
randomSeed(analogRead(0)); //Added to generate "more randomness" with the randomArray for the output function
for (int y=0; y<=99; y++){ //For statement to loop through the output and input functions
output();
input();
}
}
void loop() { //Unused void loop(), though for some reason it doesn't compile without this /shrug
}
void output() { //function for generating the array to be matched by the player
for (int y=turn; y <= turn; y++){ //Limited by the turn variable
Serial.println(""); //Some serial output to follow along
Serial.print("Turn: ");
Serial.print(y);
Serial.println("");
randomArray[y] = random(1, 5); //Assigning a random number (1-4) to the randomArray[y], y being the turn count
for (int x=0; x <= turn; x++){
Serial.print(randomArray[x]);
if (randomArray[x]
== 1) { //if statements to display the stored values in the array
digitalWrite(led1, HIGH);
delay(500);
digitalWrite(led1, LOW);
delay(100);
}
if (randomArray[x]
== 2) {
digitalWrite(led2, HIGH);
delay(500);
digitalWrite(led2, LOW);
delay(100);
}
if (randomArray[x]
== 3) {
digitalWrite(led3, HIGH);
delay(500);
digitalWrite(led3, LOW);
delay(100);
}
if (randomArray[x]
== 4) {
digitalWrite(led4, HIGH);
delay(500);
digitalWrite(led4, LOW);
delay(100);
}
}
}
}
void input() { //Function for allowing user input and checking input against the generated array
for (int x=0; x <= turn;){ //Statement controlled by turn count
/*input1 = digitalRead(switch1);
input2 = digitalRead(switch2);
input3 = digitalRead(switch3);
input4 = digitalRead(switch4);*/
inputRead = analogRead(buttonSensor);
//Serial.println(inputRead);
delay(100);
if (inputRead > 685){ //Checking for button push
digitalWrite(led1, HIGH);
//playTone(1915, 200);//Passes tone value and duration of the tone to the playTone function
delay(200);
digitalWrite(led1, LOW);
inputArray[x] = 1;
delay(50);
Serial.print(" ");
Serial.print(1);
if (inputArray[x] != randomArray[x]) { //Checks value input by user and checks it against
fail(); //the value in the same spot on the generated array
} //The fail function is called if it does not match
x++;
}
if ((inputRead > 600) && (inputRead <680)){
digitalWrite(led2, HIGH);
delay(200);
digitalWrite(led2, LOW);
inputArray[x]
= 2;
delay(50);
Serial.print(" ");
Serial.print(2);
if (inputArray[x]
!= randomArray[x]
) {
fail();
}
x++;
}
if ((inputRead > 535) && (inputRead <590)){
digitalWrite(led3, HIGH);
delay(200);
digitalWrite(led3, LOW);
inputArray[x]
= 3;
delay(50);
Serial.print(" ");
Serial.print(3);
if (inputArray[x]
!= randomArray[x]
) {
fail();
}
x++;
}
if ((inputRead > 400) && (inputRead <525)){
digitalWrite(led4, HIGH);
delay(200);
digitalWrite(led4, LOW);
inputArray[x]
= 4;
delay(50);
Serial.print(" ");
Serial.print(4);
if (inputArray[x]
!= randomArray[x]
) {
fail();
Serial.print("failed");
}
x++;
}
}
delay(500);
turn++; //Increments the turn count, also the last action before starting the output function over again
}
void fail() { //Function used if the player fails to match the sequence
for (int y=0; y<=5; y++){ //Flashes lights for failure
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
delay(200);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
delay(200);
}
delay(500);
turn = -1; //Resets turn value so the game starts over without need for a reset button
}[/code]