Multiple pushbuttons all read constantly as HIGH without being pressed

hi, i'm working on a project where i'm using eight buttons to change integer variables: the buttons on the lower breadboard decrease their respective values, while the buttons on the higher one increase them. basically just a slightly-easier way of setting a digital clock. there are multiple modes for setting values for different variables - time, date and latitude.

for some reason every single button keeps reading as HIGH, meaning it instantly skips to the final mode and means the values can't be changed, bc they're stuck in a deadlock of trying to be increased and decrease by the same amount every moment. (i was investigating the problem with another project, also attached but wiring is a mess, and the values were different.)

does anybody know why this is happening when i use multiple buttons, or how to fix it?

main project wiring:


code:

#include <Adafruit_GFX.h>
#include "Adafruit_LEDBackpack.h"

Adafruit_7segment matrix = Adafruit_7segment();

// component pins
const int button01 = 2;  //1 = +, 2 = -
const int button02 = 3;
const int button11 = 4;           // digit 1, +
const int button12 = 5;           // digit 1, -
const int button31 = 6;           // digit 3, +
const int button32 = 7;           // digit 3, -
const int button41 = 8;           //digit 4, +
const int button42 = 9;           //digit 4, -
const int button_confirm_1 = 10;  //date/time confirm button
const int button_confirm_2 = 11;  // latitude confirm button
const int ledPin = 12;            // latitude LED

//pressed variables
int pressed1 = LOW; 			  //use as necessary, clean up later
int pressed2 = LOW;
int pressed3 = LOW;
int pressed4 = LOW;
int pressed5 = LOW;
int pressed6 = LOW;
int pressed7 = LOW;
int pressed8 = LOW;
int pressed9 = LOW; 			   //confirmation button variable

int CONFIRM = LOW;
int DATE_TIME_LAT = 0;

// input/display variables
int T_Hour_Tens = 0;
int T_Hour_Units = 0;
int T_Minute_Tens = 0;
int T_Minute_Units = 0;  // all time variable
int D_Day_Tens = 0;
int D_Day_Units = 0;
int D_Month_Tens = 0;
int D_Month_Units = 0;  // all date variables
int PotVal = 0;

//product variables
int time_hour = 0;    // first half of time XX:00
int time_minute = 0;  // second half of time 00:XX
int date = 0;         // day of year
int month = 0;
int value=0; // LATITUDE

int MODE = 1;  // 1=TIME, 2=DATE, 3-LATITUDE

void setup() {
  // put your setup code here, to run once:
  pinMode(button01, INPUT);
  pinMode(button02, INPUT);
  pinMode(button12, INPUT);
  pinMode(button12, INPUT);
  pinMode(button31, INPUT);
  pinMode(button32, INPUT);
  pinMode(button41, INPUT);
  pinMode(button42, INPUT);
  pinMode(button_confirm_1, INPUT);
  pinMode(button_confirm_2, INPUT);
  pinMode(PotVal, INPUT);
  pinMode(ledPin, OUTPUT);
  int value=0;
  int MODE = 1;

#ifndef __AVR_ATtiny85__
  Serial.begin(9600);
  Serial.println("HELI");
#endif
  matrix.begin(0x70);
  matrix.print("0000");
  matrix.writeDisplay();
}

void loop() {
  // put your main code here, to run repeatedly:
  if (MODE == 1) {  // TIME
    digitalWrite(ledPin, LOW);
    matrix.writeDigitNum(0, (T_Hour_Tens), false);
    matrix.writeDisplay();
    matrix.writeDigitNum(1, (T_Hour_Units), false);
    matrix.writeDisplay();
    matrix.writeDigitNum(3, (T_Minute_Tens), false);
    matrix.writeDisplay();
    matrix.writeDigitNum(4, (T_Minute_Units), false);
    matrix.writeDisplay();
    matrix.writeDigitRaw(2, 0x02);
    matrix.writeDisplay();
    
    if (T_Minute_Tens >= 1){
      digitalWrite (ledPin, HIGH);
	} else {
        digitalWrite(ledPin, LOW);
    }

    pressed1 = digitalRead(button41);  // DECREASE DIGIT 4 -> 00:0X
    if (pressed1 == HIGH) {
      T_Minute_Units = T_Minute_Units + 1;
      pressed1 = LOW;
    } else {
      pressed1 = LOW;
    }
    pressed2 = digitalRead(button42);  // DECREASE DIGIT 4 -> 00:0X
    if (pressed2 == HIGH) {
      T_Minute_Units = T_Minute_Units - 1;
      //print T_Minute_Units to digit 0
      pressed2 = LOW;
    } else {
      pressed2 = LOW;
    }
    pressed3 = digitalRead(button31);  // INCREASE DIGIT 3 -> 00:X0
    if (pressed3 == HIGH) {
      T_Minute_Tens = T_Minute_Tens + 1;
      //print T_Minute_Tens to digit 3
      pressed3 = LOW;
    } else {
      pressed3 = LOW;
    }
    pressed4 = digitalRead(button32);  // DECREASE DIGIT 3 -> 00:X0
    if (pressed4 == HIGH) {
      T_Minute_Tens = T_Minute_Tens - 1;
      //print T_Minute_Tens to digit 3
      pressed4 = LOW;
    } else {
      pressed4 = LOW;
    }
    pressed5 = digitalRead(button11);  // INCREASE DIGIT 1 -> 0X:00
    if (pressed5 == HIGH) {
      T_Hour_Units = T_Hour_Units + 1;
      //print T_Hour_Units to digit 1
      pressed5 = LOW;
    } else {
      pressed5 = LOW;
    }
    pressed6 = digitalRead(button12);  // DECREASE DIGIT 1 -> 0X:00
    if (pressed6 == HIGH) {
      T_Hour_Units = T_Hour_Units - 1;
      //print T_Hour_Units to digit 1
      pressed6 = LOW;
    } else {
      pressed6 = LOW;
    }
    pressed7 = digitalRead(button01);  // INCREASE DIGIT 0 -> X0:00
    if (pressed7 == HIGH) {
      T_Hour_Tens = T_Hour_Tens + 1;
      //print T_Hour_Tens to digit 0
      pressed7 = LOW;
    } else {
      pressed7 = LOW;
    }
    pressed8 = digitalRead(button02);  // DECREASE DIGIT 0 -> X0:00
    if (pressed8 == HIGH) {
      T_Hour_Tens = T_Hour_Tens - 1;
      //print T_Hour_Tens to digit 0
      pressed8 = LOW;
    } else {
      pressed8 = LOW;
    }

    //TIME CORRECTING -> 24:00 TO 00:00 / 00:0-1 TO 23:59 ETC
    if (T_Minute_Units >= 10) {  //if time 00:0 10
      T_Minute_Units = 0;
      T_Minute_Tens = T_Minute_Tens + 1;  // set time 00:10
    } else if (T_Minute_Units <= -1) {    //if time 00:0-1
      T_Minute_Units = 9;
      T_Minute_Tens = T_Minute_Tens - 1;  // set time 23:59
    }

    if (T_Minute_Tens >= 6) {  //if time 00:10 0
      T_Minute_Tens = 0;
      T_Minute_Units = 0;
      T_Hour_Units = T_Hour_Units + 1;  // set time 01:00
    } else if (T_Minute_Tens <= -1) {   // if time 00:-1 0
      T_Minute_Tens = 5;
      T_Minute_Units = 9;
      T_Hour_Units = T_Hour_Units - 1;  // set time 23:59
    }

    if ((T_Hour_Units >= 4) && (T_Hour_Tens >= 2)) {  //if time 24:00
      T_Hour_Tens = 0;
      T_Hour_Units = 0;
      T_Minute_Tens = 0;
      T_Minute_Units = 0;               // set time 00:00
    } else if (T_Minute_Units >= 10) {  //if time 0 10:00
      T_Hour_Units = 0;
      T_Hour_Tens = T_Hour_Tens + 1;    // set time 10:00
    } else if (T_Minute_Units <= -1) {  //if time 1-1:00
      T_Hour_Units = 9;
      T_Hour_Tens = T_Hour_Tens - 1;  // set time 09:00
    }
    if (((T_Hour_Tens >= 2) && (T_Hour_Units >= 4)) || (T_Hour_Tens >= 3)) {  //if time 24:00 or 30:00
      T_Hour_Tens = 0;
      T_Hour_Units = 0;
      T_Minute_Tens = 0;
      T_Minute_Units = 0;            // set time 00:00
    } else if (T_Hour_Tens <= -1) {  //if time -1 0:00
      T_Hour_Tens = 2;
      T_Hour_Units = 3;
      T_Minute_Tens = 5;
      T_Minute_Units = 9;  // set time 23:59
    }

    pressed9 = digitalRead(button_confirm_1);  //CHECK FOR INPUT CONFIRMATION
    if (pressed9 == HIGH) {
      int time_hour = ((T_Hour_Tens * 10) + T_Hour_Units);        // first half of time XX:00
      int time_minute = ((T_Minute_Tens * 10) + T_Minute_Units);  // second half of time 00:XX
      MODE = 2;
      pressed9 = LOW;
    } else {
      pressed9 = LOW;
    }
  }
  
  if (MODE == 2) {  // DATE
    digitalWrite(ledPin, LOW);
    matrix.writeDigitNum(0, (D_Day_Tens), false);
    matrix.writeDisplay();
    matrix.writeDigitNum(1, (D_Day_Units), false);
    matrix.writeDisplay();
    matrix.writeDigitNum(3, (D_Month_Tens), false);
    matrix.writeDisplay();
    matrix.writeDigitNum(4, (D_Month_Units), false);
    matrix.writeDisplay();
    matrix.writeDigitRaw(2, 0x00);
    matrix.writeDisplay();

    pressed1 = digitalRead(button41);  // INCREASE DIGIT 4 -> 00/0X
    if (pressed1 == HIGH) {
      D_Month_Units = D_Month_Units + 1;
      //print D_Month_Units to digit 4
      pressed1 = LOW;
    } else {
      pressed1 = LOW;
    }
    pressed2 = digitalRead(button42);  // DECREASE DIGIT 4 -> 00/0X
    if (pressed2 == HIGH) {
      D_Month_Units = D_Month_Units - 1;
      //print D_Month_Units to digit 0
      pressed2 = LOW;
    } else {
      pressed2 = LOW;
    }
    pressed3 = digitalRead(button31);  // INCREASE DIGIT 3 -> 00/X0
    if (pressed3 == HIGH) {
      D_Month_Tens = D_Month_Tens + 1;
      //print D_Month_Tens to digit 3
      pressed3 = LOW;
    } else {
      pressed3 = LOW;
    }
    pressed4 = digitalRead(button32);  // DECREASE DIGIT 3 -> 00/X0
    if (pressed4 == HIGH) {
      D_Month_Tens = D_Month_Tens - 1;
      //print D_Month_Tens to digit 3
      pressed4 = LOW;
    } else {
      pressed4 = LOW;
    }
    pressed5 = digitalRead(button11);  // INCREASE DIGIT 1 -> 0X/00
    if (pressed5 == HIGH) {
      D_Day_Tens = D_Day_Tens + 1;
      //print D_Day_Tens to digit 1
      pressed5 = LOW;
    } else {
      pressed5 = LOW;
    }
    pressed6 = digitalRead(button12);  // DECREASE DIGIT 1 -> 0X/00
    if (pressed6 == HIGH) {
      D_Day_Tens = D_Day_Tens - 1;
      //print D_Day_Tens to digit 1
      pressed6 = LOW;
    } else {
      pressed6 = LOW;
    }
    pressed7 = digitalRead(button01);  // INCREASE DIGIT 0 -> X0/00
    if (pressed7 == HIGH) {
      D_Day_Units = D_Day_Units + 1;
      //print D_Day_Units to digit 0
      pressed7 = LOW;
    } else {
      pressed7 = LOW;
    }
    pressed8 = digitalRead(button02);  // DECREASE DIGIT 0 -> X0/00
    if (pressed8 == HIGH) {
      D_Day_Units = D_Day_Units - 1;
      //print D_Day_Units to digit 0
      pressed8 = LOW;
    } else {
      pressed8 = LOW;
    }

    int month = ((D_Month_Tens * 10) + D_Month_Units);

    //DATE CORRECTING -> 01:13 TO 01/01 / 30:0-1 TO 31/12 ETC
    if (D_Day_Units >= 10) {  //if date 0 10/01
      D_Day_Units = 0;
      D_Day_Tens = D_Day_Tens + 1;   // set date 10/01
    } else if (D_Day_Units <= -1) {  //if time 1-1/01
      D_Day_Units = 9;
      D_Day_Tens = D_Day_Tens - 1;                         // set date 09/01
    } else if ((D_Day_Units <= 0) && (D_Day_Tens == 0)) {  //if day 00/01
      D_Day_Units = 9;
      D_Day_Tens = D_Day_Tens - 1;  // set date 09/01
    }

    if (D_Day_Tens >= 4) {  //if date 40/01
      D_Day_Tens = 0;
      D_Day_Units = 1;
      D_Month_Units = D_Month_Units + 1;                                   // set date 01/02
    } else if ((month == 1) && (D_Day_Tens >= 3) && (D_Day_Units >= 2)) {  // if date 32/01
      D_Day_Tens = 0;
      D_Day_Units = 1;
      D_Month_Units = D_Month_Units + 1;
    } else if ((month == 2) && (D_Day_Tens >= 2) && (D_Day_Units >= 9)) {  // if date 29/02
      D_Day_Tens = 0;
      D_Day_Units = 1;
      D_Month_Units = D_Month_Units + 1;
    } else if ((month == 3) && (D_Day_Tens >= 3) && (D_Day_Units >= 2)) {  // if date 32/01
      D_Day_Tens = 0;
      D_Day_Units = 1;
      D_Month_Units = D_Month_Units + 1;
    } else if ((month == 4) && (D_Day_Tens >= 3) && (D_Day_Units >= 1)) {  // if date 31/04
      D_Day_Tens = 0;
      D_Day_Units = 1;
      D_Month_Units = D_Month_Units + 1;
    } else if ((month == 5) && (D_Day_Tens >= 3) && (D_Day_Units >= 2)) {  // if date 32/05
      D_Day_Tens = 0;
      D_Day_Units = 1;
      D_Month_Units = D_Month_Units + 1;
    } else if ((month == 6) && (D_Day_Tens >= 3) && (D_Day_Units >= 1)) {  // if date 31/06
      D_Day_Tens = 0;
      D_Day_Units = 1;
      D_Month_Units = D_Month_Units + 1;
    } else if ((month == 7) && (D_Day_Tens >= 3) && (D_Day_Units >= 2)) {  // if date 32/07
      D_Day_Tens = 0;
      D_Day_Units = 1;
      D_Month_Units = D_Month_Units + 1;
    } else if ((month == 8) && (D_Day_Tens >= 3) && (D_Day_Units >= 2)) {  // if date 32/08
      D_Day_Tens = 0;
      D_Day_Units = 1;
      D_Month_Units = D_Month_Units + 1;
    } else if ((month == 9) && (D_Day_Tens >= 3) && (D_Day_Units >= 1)) {  // if date 31/09
      D_Day_Tens = 0;
      D_Day_Units = 1;
      D_Month_Tens = 1;
      D_Month_Units = 0;
    } else if ((month == 10) && (D_Day_Tens >= 3) && (D_Day_Units >= 2)) {  // if date 32/10
      D_Day_Tens = 0;
      D_Day_Units = 1;
      D_Month_Units = D_Month_Units + 1;
    } else if ((month == 11) && (D_Day_Tens >= 3) && (D_Day_Units >= 1)) {  // if date 31/11
      D_Day_Tens = 0;
      D_Day_Units = 1;
      D_Month_Units = D_Month_Units + 1;
    } else if ((month == 12) && (D_Day_Tens >= 3) && (D_Day_Units >= 2)) {  // if date 32/12
      D_Day_Tens = 0;
      D_Day_Units = 1;
      D_Month_Tens = 0;
      D_Month_Units = 1;

    } else if ((month == 1) && (D_Day_Tens >= 3) && (D_Day_Units >= 2)) {  // if date 00/01
      D_Day_Tens = 3;
      D_Day_Units = 1;
      D_Month_Tens = 1;
      D_Month_Units = 2;
    } else if ((month == 2) && (D_Day_Tens <= 0) && (D_Day_Units <= 0)) {  // if date 29/02
      D_Day_Tens = 3;
      D_Day_Units = 1;
      D_Month_Units = D_Month_Units - 1;
    } else if ((month == 3) && (D_Day_Tens <= 0) && (D_Day_Units <= 0)) {  // if date 00/03
      D_Day_Tens = 2;
      D_Day_Units = 8;
      D_Month_Units = D_Month_Units - 1;
    } else if ((month == 4) && (D_Day_Tens <= 0) && (D_Day_Units <= 0)) {  // if date 00/04
      D_Day_Tens = 3;
      D_Day_Units = 1;
      D_Month_Units = D_Month_Units - 1;
    } else if ((month == 5) && (D_Day_Tens <= 0) && (D_Day_Units <= 0)) {  // if date 00/05
      D_Day_Tens = 3;
      D_Day_Units = 0;
      D_Month_Units = D_Month_Units - 1;
    } else if ((month == 6) && (D_Day_Tens <= 0) && (D_Day_Units <= 0)) {  // if date 00/06
      D_Day_Tens = 3;
      D_Day_Units = 1;
      D_Month_Units = D_Month_Units - 1;
    } else if ((month == 7) && (D_Day_Tens <= 0) && (D_Day_Units <= 0)) {  // if date 00/07
      D_Day_Tens = 0;
      D_Day_Units = 1;
      D_Month_Units = D_Month_Units - 1;
    } else if ((month == 8) && (D_Day_Tens <= 0) && (D_Day_Units <= 0)) {  // if date 00/08
      D_Day_Tens = 3;
      D_Day_Units = 1;
      D_Month_Units = D_Month_Units - 1;
    } else if ((month == 9) && (D_Day_Tens <= 0) && (D_Day_Units <= 0)) {  // if date 00/09
      D_Day_Tens = 3;
      D_Day_Units = 1;
      D_Month_Units = D_Month_Units - 1;
    } else if ((month == 10) && (D_Day_Tens <= 0) && (D_Day_Units <= 0)) {  // if date 00/10
      D_Day_Tens = 3;
      D_Day_Units = 0;
      D_Month_Units = 9;
      D_Month_Tens = 0;
    } else if ((month == 11) && (D_Day_Tens <= 0) && (D_Day_Units <= 0)) {  // if date 00/11
      D_Day_Tens = 3;
      D_Day_Units = 1;
      D_Month_Units = D_Month_Units - 1;
    } else if ((month == 12) && (D_Day_Tens <= 0) && (D_Day_Units <= 0)) {  // if date 00/12
      D_Day_Tens = 3;
      D_Day_Units = 0;
      D_Month_Units = D_Month_Units - 1;
    }
  }

  if (D_Month_Units <= -1) {  //if date XX/0-1
    if (D_Month_Tens == 0) {
      D_Month_Tens = 1;
      D_Month_Units = 2;
      D_Day_Tens = 3;
      D_Day_Units = 1;             // set date 31/12
    } else if (D_Month_Tens == 1)  // if date XX/1-1
      D_Month_Tens = 3;
    D_Month_Units = 1;
    D_Day_Tens = 1;
    D_Day_Units = 2;  // set date 31/12
  }
  if ((D_Month_Units <= 0) && (D_Month_Tens == 0)) {  // if date XX/00
    D_Month_Tens = 3;
    D_Month_Units = 0;
    D_Day_Tens = 0;
    D_Day_Units = 9;                 // set date 30/09
  } else if (D_Month_Units >= 10) {  //if date XX/010
    D_Month_Tens = 1;
    D_Month_Units = 0;
    D_Day_Tens = 0;
    D_Day_Units = 1;  // set date 01/10
  }

  if (((D_Month_Tens >= 1) && (D_Month_Units >= 3)) || (D_Month_Tens >= 2)) {  //if date XX/13 or XX/20
    D_Month_Tens = 0;
    D_Month_Units = 1;
    D_Day_Tens = 0;
    D_Day_Units = 1;                // set time 00:00
  } else if (D_Month_Tens <= -1) {  //if date XX/0-1
    D_Month_Tens = 1;
    D_Month_Units = 2;
    D_Day_Tens = 3;
    D_Day_Units = 1;  // set date 31/12
  }

  pressed9 = digitalRead(button_confirm_1);  //CHECK FOR INPUT CONFIRMATION

  if (pressed9 == HIGH) {                                //if at start of broken loop
    int date = ((D_Day_Tens * 10) + D_Day_Units);       // first half of date XX/00
    int month = ((D_Month_Tens * 10) + D_Month_Units);  // second half of date 00/XX
    if (month = 1) {                                    //jan
      date = date + 0;
    } else if (month = 2) {  // feb
      date = date + 31;
    } else if (month = 3) {  // mar
      date = date + 59;
    } else if (month = 4) {  //apr
      date = date + 90;
    } else if (month = 5) {  // may
      date = date + 120;
    } else if (month = 6) {  // jun
      date = date + 151;
    } else if (month = 7) {  //july
      date = date + 181;
    } else if (month = 8) {  // aug
      date = date + 212;
    } else if (month = 9) {  //sept
      date = date + 243;
    } else if (month = 10) {  //oct
      date = date + 273;
    } else if (month = 11) {  // nov
      date = date + 304;
    } else if (month = 12) {  //dec
      date = date + 334;
    }
    MODE = 3;  // switch to LAT
    pressed9 = LOW;
  } else {
    pressed9 = LOW;
  }
//}  //closed brackets for this if loop, presumably source of error


if (MODE == 3) {                  //475:1: error: aexpected unqualified-id before 'if'
  digitalWrite(ledPin, HIGH);     //turn on light
  matrix.print(value);
  matrix.writeDisplay();
  
  pressed1 = digitalRead(button41);
  if (pressed1==HIGH) {
    value=value+1;
    delay(180);
    pressed1=0;
  } else {
    pressed1 = 0;
  } 
  pressed2 = digitalRead(button42);
  if (pressed2==HIGH) {
    value=value-1;
    delay (180);
    pressed2=0;
  } else {
    pressed2 = 0;
  }
  pressed3 = digitalRead(button31);
  if (pressed3==HIGH) {
    value=value+10;
    delay(180);
    pressed3=0;
  } else {
    pressed3 = 0;
  } 
  pressed4 = digitalRead(button32);
  if (pressed4==HIGH) {
    value=value-10;
    delay(180);
    pressed4=0;
  } else {
    pressed4 = 0;
  }
  
  if (value>=91){
    value=-90;
  } else if (value<=-91)
      value=90;
  }
  
  pressed5 = digitalRead(button_confirm_1);  //CHECK FOR INPUT CONFIRMATION
  if (pressed5 == HIGH) {
    Serial.println(time_hour + String(":") + time_minute);
    Serial.println(date);
    Serial.println(value);
    pressed5=0;
  } else {
    pressed5=0;
  }
}
(code is a mess, i'm aware :( trying to debug before i streamline it.)

The picture looks like you have wired the buttons through the Normally Closed (NC) contacts... directly connecting the Arduino pin and VCC. When wiring buttons, use "diagonal" pins to ensure the Normally Open (NO) contacts are used, and when the button is pressed, the contacts close.

https://docs.arduino.cc/built-in-examples/digital/Button/

Move the wires on the top side of the switches to the right hand side (i.e. above the resistors). The switch contacts connect horizontally, not vertically.

works perfectly, thank you! ^o^

Hi, @shadowcat500
Good that you have it running.

Suggestion, if you are going to be doing anymore Arduino projects you get yourself a low cost Digital Multimeter.
A valuable tool.

It would have helped you solve your problem in minutes.

Tom.. :smiley: :+1: :coffee: :australia: