Arduino is unwanted pressing a button and giving HIGH

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;
  }
}

I expect that you have floating inputs.

Unconnected pins float, you would need pull-down resistors to ensure a LOW on an open button.

If you change all input pins to INPUT_PULLUP, and close the switches to GND instead of 5V,
you would need no external hardware.
The only difference would be HIGH equals open, and LOW closed.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.