Pressing button once is registered twice

Hi all,

I think i have a small error in my code but i cant find it. Please help!

const int button1 = 1;
const int button2 = 3;
const int button3 = 5;
const int button4 = 7;
const int LedA = 2;
const int LedB = 4;
const int LedC = 6;
const int LedD = 8;
int code[] = {1, 2, 3, 4, 1, 2, 3, 4, 1, 2};
int entered[10];
int mode = 1;//mode 0=keypad 1=spel

void setup() {
  Serial.begin(9600);
  pinMode(button1, INPUT_PULLUP);
  pinMode(button2, INPUT_PULLUP);
  pinMode(button3, INPUT_PULLUP);
  pinMode(button4, INPUT_PULLUP);
  pinMode(LedA, OUTPUT);
  pinMode(LedB, OUTPUT);
  pinMode(LedC, OUTPUT);
  pinMode(LedD, OUTPUT);
  digitalWrite(LedA, LOW);
  digitalWrite(LedB, LOW);
  digitalWrite(LedC, LOW);
  digitalWrite(LedD, LOW);
  Serial.println("SETUP READY");
}

void loop() {
  voorbeeld();
  mode = 1;
  while (mode == 1) {
    spel();
  }
}

void spel() {
  if (digitalRead(button1) == LOW) {
    digitalWrite(LedA, HIGH);
    Serial.println("KNOP 1");
    delay(500);
    digitalWrite(LedA, LOW);
    checkInput1(1);
  }
  else if (digitalRead(button2) == LOW) {
    digitalWrite(LedB, HIGH);
    Serial.println("KNOP 2");
    delay(500);
    digitalWrite(LedB, LOW);
    checkInput1(2);
  }
  else if (digitalRead(button3) == LOW) {
    digitalWrite(LedC, HIGH);
    Serial.println("KNOP 3");
    delay(500);
    digitalWrite(LedC, LOW);
    checkInput1(3);
  }
  else if (digitalRead(button4) == LOW) {
    digitalWrite(LedD, HIGH);
    Serial.println("KNOP 4");
    delay(500);
    digitalWrite(LedD, LOW);
    checkInput1(4);
  }
}
void checkInput1(int button) {
  if (entered[0] != 0) {
    checkInput2(button);
  }

  else if (entered[0] == 0) {
    entered[0] = button;
    if (entered[0] == code [0]) {
      Serial.println("input 1: Goed");
    }
    else {
      Serial.println("Input 1: Fout");
      entered[0] = 0;
      entered[1] = 0;
      entered[2] = 0;
      entered[3] = 0;
      entered[4] = 0;
      entered[5] = 0;
      entered[6] = 0;
      entered[7] = 0;
      entered[8] = 0;
      entered[9] = 0;
      voorbeeld();
    }
  }
}

void checkInput2(int button) {
  if (entered[1] != 0) {
    checkInput3(button);
  }

  else if (entered[1] == 0) {
    entered[1] = button;
    if (entered[1] == code [1]) {
      Serial.println("input 2: Goed");
    }
    else {
      Serial.println("Input 2: Fout");
      entered[0] = 0;
      entered[1] = 0;
      entered[2] = 0;
      entered[3] = 0;
      entered[4] = 0;
      entered[5] = 0;
      entered[6] = 0;
      entered[7] = 0;
      entered[8] = 0;
      entered[9] = 0;
      voorbeeld();
    }
  }
}

void checkInput3(int button) {
  if (entered[2] != 0) {
    checkInput4(button);
  }

  else if (entered[2] == 0) {
    entered[2] = button;
    if (entered[2] == code [2]) {
      Serial.println("input 3: Goed");
    }
    else {
      Serial.println("Input 3: Fout");
      entered[0] = 0;
      entered[1] = 0;
      entered[2] = 0;
      entered[3] = 0;
      entered[4] = 0;
      entered[5] = 0;
      entered[6] = 0;
      entered[7] = 0;
      entered[8] = 0;
      entered[9] = 0;
      voorbeeld();
    }
  }
}

void checkInput4(int button) {
  if (entered[3] != 0) {
    checkInput5(button);
  }

  else if (entered[3] == 0) {
    entered[3] = button;
    if (entered[3] == code [3]) {
      Serial.println("input 4: Goed");
    }
    else {
      Serial.println("Input 4: Fout");
      entered[0] = 0;
      entered[1] = 0;
      entered[2] = 0;
      entered[3] = 0;
      entered[4] = 0;
      entered[5] = 0;
      entered[6] = 0;
      entered[7] = 0;
      entered[8] = 0;
      entered[9] = 0;
      voorbeeld();
    }
  }
}

void checkInput5(int button) {
  if (entered[4] != 0) {
    checkInput6(button);
  }

  else if (entered[4] == 0) {
    entered[4] = button;
    if (entered[4] == code [4]) {
      Serial.println("input 5: Goed");
    }
    else {
      Serial.println("Input 5: Fout");
      entered[0] = 0;
      entered[1] = 0;
      entered[2] = 0;
      entered[3] = 0;
      entered[4] = 0;
      entered[5] = 0;
      entered[6] = 0;
      entered[7] = 0;
      entered[8] = 0;
      entered[9] = 0;
      voorbeeld();
    }
  }
}

void checkInput6(int button) {
  if (entered[5] != 0) {
    checkInput7(button);
  }

  else if (entered[5] == 0) {
    entered[5] = button;
    if (entered[5] == code [5]) {
      Serial.println("input 6: Goed");
    }
    else {
      Serial.println("Input 6: Fout");
      entered[0] = 0;
      entered[1] = 0;
      entered[2] = 0;
      entered[3] = 0;
      entered[4] = 0;
      entered[5] = 0;
      entered[6] = 0;
      entered[7] = 0;
      entered[8] = 0;
      entered[9] = 0;
      voorbeeld();
    }
  }
}

void checkInput7(int button) {
  if (entered[6] != 0) {
    checkInput8(button);
  }

  else if (entered[6] == 0) {
    entered[6] = button;
    if (entered[6] == code [6]) {
      Serial.println("input 7: Goed");
    }
    else {
      Serial.println("Input 7: Fout");
      entered[0] = 0;
      entered[1] = 0;
      entered[2] = 0;
      entered[3] = 0;
      entered[4] = 0;
      entered[5] = 0;
      entered[6] = 0;
      entered[7] = 0;
      entered[8] = 0;
      entered[9] = 0;
      voorbeeld();
    }
  }
}

void checkInput8(int button) {
  if (entered[7] != 0) {
    checkInput9(button);
  }

  else if (entered[7] == 0) {
    entered[7] = button;
    if (entered[7] == code [7]) {
      Serial.println("input 8: Goed");
    }
    else {
      Serial.println("Input 8: Fout");
      entered[0] = 0;
      entered[1] = 0;
      entered[2] = 0;
      entered[3] = 0;
      entered[4] = 0;
      entered[5] = 0;
      entered[6] = 0;
      entered[7] = 0;
      entered[8] = 0;
      entered[9] = 0;
      voorbeeld();
    }
  }
}

void checkInput9(int button) {
  if (entered[8] != 0) {
    checkInput10(button);
  }

  else if (entered[8] == 0) {
    entered[8] = button;
    if (entered[8] == code [8]) {
      Serial.println("input 9: Goed");
    }
    else {
      Serial.println("Input 9: Fout");
      entered[0] = 0;
      entered[1] = 0;
      entered[2] = 0;
      entered[3] = 0;
      entered[4] = 0;
      entered[5] = 0;
      entered[6] = 0;
      entered[7] = 0;
      entered[8] = 0;
      entered[9] = 0;
      voorbeeld();
    }
  }
}

void checkInput10(int button) {
  if (entered[9] != 0) {
    Serial.println("???");
  }

  else if (entered[9] == 0) {
    entered[9] = button;
    if (entered[9] == code [9]) {
      Serial.println("input 10: Goed");
    }
    else {
      Serial.println("Input 10: Fout");
      entered[0] = 0;
      entered[1] = 0;
      entered[2] = 0;
      entered[3] = 0;
      entered[4] = 0;
      entered[5] = 0;
      entered[6] = 0;
      entered[7] = 0;
      entered[8] = 0;
      entered[9] = 0;
      voorbeeld();
    }
  }
}


void voorbeeld() {
  digitalWrite(LedA, HIGH);
  digitalWrite(LedB, HIGH);
  digitalWrite(LedC, HIGH);
  digitalWrite(LedD, HIGH);
  delay(1000);
  digitalWrite(LedA, LOW);
  digitalWrite(LedB, LOW);
  digitalWrite(LedC, LOW);
  digitalWrite(LedD, LOW);
  delay(700);

  digitalWrite(LedA, HIGH);
  delay(300);
  digitalWrite(LedA, LOW);
  delay(300);

  digitalWrite(LedB, HIGH);
  delay(300);
  digitalWrite(LedB, LOW);
  delay(300);

  digitalWrite(LedC, HIGH);
  delay(300);
  digitalWrite(LedC, LOW);
  delay(300);

  digitalWrite(LedD, HIGH);
  delay(300);
  digitalWrite(LedD, LOW);
  delay(300);

  digitalWrite(LedA, HIGH);
  delay(300);
  digitalWrite(LedA, LOW);
  delay(300);

  digitalWrite(LedB, HIGH);
  delay(300);
  digitalWrite(LedB, LOW);
  delay(300);

  digitalWrite(LedC, HIGH);
  delay(300);
  digitalWrite(LedC, LOW);
  delay(300);

  digitalWrite(LedD, HIGH);
  delay(300);
  digitalWrite(LedD, LOW);
  delay(300);

  digitalWrite(LedA, HIGH);
  delay(300);
  digitalWrite(LedA, LOW);
  delay(300);

  digitalWrite(LedB, HIGH);
  delay(300);
  digitalWrite(LedB, LOW);
  delay(300);
}

My serial monitor prints:
SETUP READY
input 1: Goed
KNOP 1
Input 2: Fout
Kinput 1: Goed
KNOP 1
Input 2: Fout
input 1: Goed
KNOP 1
Input 2: Fout

The problem:
After I press button 1 it checks the first input but directly after that it will detect another push on button 1 (which makes input 2 wrong)
Something else is a bith off since it doesnt print everything to the serial monitor right ( should be KNOP 1). Does this have anything to do with my problem?

I tried disconnecting the button1 and replacing the button1. This problem only occours with button1 so i suspect an error in my code.

thanks!

LOL,
While typing my forum message i start to think about the relation between the weird serial monitor output and the error i'm getting. Pin1 (for Button1) is obviously for TX which creates this error! I changed the pins and everything is working fine!

Very helpfull this forum!

There's actually a name for finding problems this way: "rubber duck debugging" (look it up on Wikipedia). Basically, it's the practice of precisely describing the problem to someone else (could be a person, could be a forum, or it could be a rubber duck). This process forces you to think through the code again and can help you spot problems.

dnwheeler:
There's actually a name for finding problems this way: "rubber duck debugging" (look it up on Wikipedia). Basically, it's the practice of precisely describing the problem to someone else (could be a person, could be a forum, or it could be a rubber duck). This process forces you to think through the code again and can help you spot problems.

Never hear a name for it, but it sure works in any technical environment.

Paul