Hey Guys, i have a small problem about my Arduino project. Im working with the Arduino Uno and a Base Shield and three buttons and a buzzer. I'm a beginner in programming so please don't blame my long code. I wrote different phases so the program only goes on when the previous phase is done. The project is a little game where you have to play 5 different pitched sounds (3 Buttons) and the device repeats you. Then the device plays random sounds and you have to repeat. Then the device tells you if you won or not. Somehow the buzzer is going off and it is writing in the array in the last repeating phase. I just don't understand how and why it is behaving like that. The Serial Monitor output is showing that it is giving a random number to the array and playing the correct sound. So i guess it somehow triggers the HIGH of a random button but i don't understand how and why.
Please help me. I tried everything i could to solve it...
Here is the code:
const int button1 = 2; // connect a button
const int button2 = 3; // connect a button
const int button3 = 4; // connect a button
const int buzzdelay = 500;
const int buzzer = 6; // connect a buzzer
int playerArray[] = {0, 0, 0, 0, 0};
int deviceArray[] = {0, 0, 0, 0, 0};
bool intro = true;
bool playerPhase = false;
bool repeatingPhase = false;
bool randomPhase = false;
bool youRepeatPhase = false;
bool checkingPhase = false;
bool resetter = false;
void setup()
{
Serial.begin(9600);
pinMode(button1, INPUT); //set button as an INPUT device
pinMode(button2, INPUT); //set button as an INPUT device
pinMode(button3, INPUT); //set button as an INPUT device
pinMode(buzzer, OUTPUT); //set LED as an OUTPUT device
randomSeed(analogRead(0));
}
void loop()
{
int btn1 = digitalRead(button1); //read the status of the button
int btn2 = digitalRead(button2); //read the status of the button
int btn3 = digitalRead(button3); //read the status of the button
// INTRO----------------------------------------------------------------------------------------------------------------------------
if (intro == true) {
tone(buzzer, 3000);
delay(150);
noTone(buzzer);
delay(200);
tone(buzzer, 3000);
delay(150);
noTone(buzzer);
delay(150);
tone(buzzer, 2000);
delay(150);
noTone(buzzer);
delay(50);
tone(buzzer, 3000);
delay(500);
noTone(buzzer);
delay(1500);
intro = false;
playerPhase = true;
}
// PLAYER PHASE----------------------------------------------------------------------------------------------------------------------------
if (playerPhase == true) {
if (btn1 == HIGH) { //Button 1
if (playerArray[0] == 0) {
playerArray[0] = 1;
tone(buzzer, 1000); //Button 1 Ton
delay(buzzdelay); //Button 1 delay
noTone(buzzer);
} else if (playerArray[1] == 0) {
playerArray[1] = 1;
tone(buzzer, 1000); //Button 1 Ton
delay(buzzdelay); //Button 1 delay
noTone(buzzer);
} else if (playerArray[2] == 0) {
playerArray[2] = 1;
tone(buzzer, 1000); //Button 1 Ton
delay(buzzdelay); //Button 1 delay
noTone(buzzer);
} else if (playerArray[3] == 0) {
playerArray[3] = 1;
tone(buzzer, 1000); //Button 1 Ton
delay(buzzdelay); //Button 1 delay
noTone(buzzer);
} else if (playerArray[4] == 0) {
playerArray[4] = 1;
tone(buzzer, 1000); //Button 1 Ton
delay(buzzdelay); //Button 1 delay
noTone(buzzer);
}
Serial.println(playerArray[0]);
Serial.println(playerArray[1]);
Serial.println(playerArray[2]);
Serial.println(playerArray[3]);
Serial.println(playerArray[4]);
Serial.println(' ');
} else {
noTone(buzzer);
}
if (btn2 == HIGH) {
if (playerArray[0] == 0) {
playerArray[0] = 2;
tone(buzzer, 2000);
delay(buzzdelay);
noTone(buzzer);
} else if (playerArray[1] == 0) {
playerArray[1] = 2;
tone(buzzer, 2000);
delay(buzzdelay);
noTone(buzzer);
} else if (playerArray[2] == 0) {
playerArray[2] = 2;
tone(buzzer, 2000);
delay(buzzdelay);
noTone(buzzer);
} else if (playerArray[3] == 0) {
playerArray[3] = 2;
tone(buzzer, 2000);
delay(buzzdelay);
noTone(buzzer);
} else if (playerArray[4] == 0) {
playerArray[4] = 2;
tone(buzzer, 2000);
delay(buzzdelay);
noTone(buzzer);
}
Serial.println(playerArray[0]);
Serial.println(playerArray[1]);
Serial.println(playerArray[2]);
Serial.println(playerArray[3]);
Serial.println(playerArray[4]);
Serial.println(' ');
} else {
noTone(buzzer);
}
if (btn3 == HIGH) {
if (playerArray[0] == 0) {
playerArray[0] = 3;
tone(buzzer, 3000);
delay(buzzdelay);
noTone(buzzer);
} else if (playerArray[1] == 0) {
playerArray[1] = 3;
tone(buzzer, 3000);
delay(buzzdelay);
noTone(buzzer);
} else if (playerArray[2] == 0) {
playerArray[2] = 3;
tone(buzzer, 3000);
delay(buzzdelay);
noTone(buzzer);
} else if (playerArray[3] == 0) {
playerArray[3] = 3;
tone(buzzer, 3000);
delay(buzzdelay);
noTone(buzzer);
} else if (playerArray[4] == 0) {
playerArray[4] = 3;
tone(buzzer, 3000);
delay(buzzdelay);
noTone(buzzer);
}
Serial.println(playerArray[0]);
Serial.println(playerArray[1]);
Serial.println(playerArray[2]);
Serial.println(playerArray[3]);
Serial.println(playerArray[4]);
Serial.println(' ');
} else {
noTone(buzzer);
}
if (playerArray[0] != 0 && playerArray[1] != 0 && playerArray[2] != 0 && playerArray[3] != 0 && playerArray[4] != 0) {
playerPhase = false;
repeatingPhase = true;
}
}
// REPEATING PHASE----------------------------------------------------------------------------------------------------------------------------
if (repeatingPhase == true) {
Serial.println("PHASE 2: YOU GET REPEATED");
delay(2000);
tone(buzzer, playerArray[0] * 1000);
delay(buzzdelay);
noTone(buzzer);
delay(300);
tone(buzzer, playerArray[1] * 1000);
delay(buzzdelay);
noTone(buzzer);
delay(300);
tone(buzzer, playerArray[2] * 1000);
delay(buzzdelay);
noTone(buzzer);
delay(300);
tone(buzzer, playerArray[3] * 1000);
delay(buzzdelay); noTone(buzzer);
delay(300);
tone(buzzer, playerArray[4] * 1000);
delay(buzzdelay);
noTone(buzzer);
delay(300);
repeatingPhase = false;
randomPhase = true;
}
// RANDOM PHASE----------------------------------------------------------------------------------------------------------------------------
if (randomPhase == true) {
delay(1500);
Serial.println("DEVICE PLAYIN RANDOM");
playerArray[0] = 0;
playerArray[1] = 0;
playerArray[2] = 0;
playerArray[3] = 0;
playerArray[4] = 0;
deviceArray[0] = random(1, 4);
deviceArray[1] = random(1, 4);
deviceArray[2] = random(1, 4);
deviceArray[3] = random(1, 4);
deviceArray[4] = random(1, 4);
tone(buzzer, deviceArray[0] * 1000);
delay(buzzdelay);
noTone(buzzer);
delay(400);
tone(buzzer, deviceArray[1] * 1000);
delay(buzzdelay);
noTone(buzzer);
delay(400);
tone(buzzer, deviceArray[2] * 1000);
delay(buzzdelay);
noTone(buzzer);
delay(400);
tone(buzzer, deviceArray[3] * 1000);
delay(buzzdelay); noTone(buzzer);
delay(400);
tone(buzzer, deviceArray[4] * 1000);
delay(buzzdelay);
noTone(buzzer);
Serial.println(deviceArray[0]);
Serial.println(deviceArray[1]);
Serial.println(deviceArray[2]);
Serial.println(deviceArray[3]);
Serial.println(deviceArray[4]);
Serial.println(' ');
delay(1500);
randomPhase = false;
youRepeatPhase = true;
}
// YOU REPEAT PHASE----------------------------------------------------------------------------------------------------------------------------
if (youRepeatPhase == true) {
delay(100);
if (btn1 == HIGH) {
if (playerArray[0] == 0) {
playerArray[0] = 1;
tone(buzzer, 1000);
delay(buzzdelay);
noTone(buzzer);
} else if (playerArray[1] == 0) {
playerArray[1] = 1;
tone(buzzer, 1000);
delay(buzzdelay);
noTone(buzzer);
} else if (playerArray[2] == 0) {
playerArray[2] = 1;
tone(buzzer, 1000);
delay(buzzdelay);
noTone(buzzer);
} else if (playerArray[3] == 0) {
playerArray[3] = 1;
tone(buzzer, 1000);
delay(buzzdelay);
noTone(buzzer);
} else if (playerArray[4] == 0) {
playerArray[4] = 1;
tone(buzzer, 1000);
delay(buzzdelay);
noTone(buzzer);
}
Serial.println(playerArray[0]);
Serial.println(playerArray[1]);
Serial.println(playerArray[2]);
Serial.println(playerArray[3]);
Serial.println(playerArray[4]);
Serial.println(' ');
} else {
noTone(buzzer);
}
if (btn2 == HIGH) {
if (playerArray[0] == 0) {
playerArray[0] = 2;
tone(buzzer, 2000);
delay(buzzdelay);
noTone(buzzer);
} else if (playerArray[1] == 0) {
playerArray[1] = 2;
tone(buzzer, 2000);
delay(buzzdelay);
noTone(buzzer);
} else if (playerArray[2] == 0) {
playerArray[2] = 2;
tone(buzzer, 2000);
delay(buzzdelay);
noTone(buzzer);
} else if (playerArray[3] == 0) {
playerArray[3] = 2;
tone(buzzer, 2000);
delay(buzzdelay);
noTone(buzzer);
} else if (playerArray[4] == 0) {
playerArray[4] = 2;
tone(buzzer, 2000);
delay(buzzdelay);
noTone(buzzer);
}
Serial.println(playerArray[0]);
Serial.println(playerArray[1]);
Serial.println(playerArray[2]);
Serial.println(playerArray[3]);
Serial.println(playerArray[4]);
Serial.println(' ');
} else {
noTone(buzzer);
}
if (btn3 == HIGH) {
if (playerArray[0] == 0) {
playerArray[0] = 3;
tone(buzzer, 3000);
delay(buzzdelay);
noTone(buzzer);
} else if (playerArray[1] == 0) {
playerArray[1] = 3;
tone(buzzer, 3000);
delay(buzzdelay);
noTone(buzzer);
} else if (playerArray[2] == 0) {
playerArray[2] = 3;
tone(buzzer, 3000);
delay(buzzdelay);
noTone(buzzer);
} else if (playerArray[3] == 0) {
playerArray[3] = 3;
tone(buzzer, 3000);
delay(buzzdelay);
noTone(buzzer);
} else if (playerArray[4] == 0) {
playerArray[4] = 3;
tone(buzzer, 3000);
delay(buzzdelay);
noTone(buzzer);
}
Serial.println(playerArray[0]);
Serial.println(playerArray[1]);
Serial.println(playerArray[2]);
Serial.println(playerArray[3]);
Serial.println(playerArray[4]);
Serial.println(' ');
} else {
noTone(buzzer);
}
if (playerArray[0] != 0 && playerArray[1] != 0 && playerArray[2] != 0 && playerArray[3] != 0 && playerArray[4] != 0) {
youRepeatPhase = false;
checkingPhase = true;
}
}
// CHECKING PHASE----------------------------------------------------------------------------------------------------------------------------
if (checkingPhase == true) {
delay(1000);
if (playerArray[0] == deviceArray[0] && playerArray[1] == deviceArray[1] && playerArray[2] == deviceArray[2] && playerArray[3] == deviceArray[3] && playerArray[4] == deviceArray[4]) {
tone(buzzer, 4000);
delay(150);
noTone(buzzer);
delay(50);
tone(buzzer, 4000);
delay(500);
noTone(buzzer);
delay(700);
Serial.println("YOU WON");
} else {
tone(buzzer, 1000);
delay(buzzdelay);
tone(buzzer, 500);
delay(buzzdelay);
tone(buzzer, 200);
delay(buzzdelay);
noTone(buzzer);
delay(700);
Serial.println("YOU LOST");
}
delay(1500);
playerArray[0] = 0;
playerArray[1] = 0;
playerArray[2] = 0;
playerArray[3] = 0;
playerArray[4] = 0;
deviceArray[0] = 0;
deviceArray[1] = 0;
deviceArray[2] = 0;
deviceArray[3] = 0;
deviceArray[4] = 0;
checkingPhase = false;
intro = true;
}
}