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.)
