Won't work together... 2 buttons, 2 outputs on ATTiny

Button1 works if only I rem out button2 instructions... Button2 works only if I rem out Button1... I've spent a lot of hours trying... what am I missing here? help!

// Button 1: 3 Press ON, 3 Press OFF, Button 2: 1 Press ON, 1 Press OFF
// 2022 by Jerry Tucker

#define button1 1    //Push button1 on D1
#define button2 2    //Push button2 on D2
#define redLED 0     //red LED on D0
#define relay1 3     //relay1 on D3
#define relay2 4     //relay2 on D4

//-----
int button1state = 0;        //integer to hold current state
int button1old = 0;          //integer to hold last state
int button1Poll = 0;         //integer to hold button state
//-----
int button2state = 0;        //integer to hold current state
int button2old = 0;          //integer to hold last state
int button2Poll = 0;         //integer to hold button state
//-----
void setup() {
  pinMode(button1, INPUT_PULLUP);   //button1 set as input
  pinMode(relay1, OUTPUT);          //relay1 set as output
  pinMode(button2, INPUT_PULLUP);   //button2 set as input
  pinMode(redLED, OUTPUT);          //redLED as output
  pinMode(relay2, OUTPUT);          //relay2 as output

  digitalWrite(redLED, LOW);        //set initial state as ON
  digitalWrite(relay1, HIGH);       //set initial state as OFF
  digitalWrite(relay2, HIGH);       //set initial state as OFF
}
//Button 1 instructions: 
void loop() {
 //debouncing routine to read button1
  button1Poll = digitalRead(button1);   //poll the state of button1
  if (button1Poll == 1) {               //check if it has been pressed
    delay(100);                         //wait 100ms
    button1Poll = digitalRead(button1); //poll button1 again
    if (button1Poll == 0) {             // if 0 - considered one press
      button1state = button1old + 1;    //increase state by 1
    }
  } else {       //if button1 has not been pressed
    delay(100);  //wait 100ms
  }
  switch (button1state) {               //react to button1 press & state
    case 1:                             //if button1state is 1
      digitalWrite(redLED, LOW);        //red LED off
      digitalWrite(relay1, HIGH);       //relay1 on
      button1old = button1state;        //set old state to state
      break;
    case 2:
      digitalWrite(redLED, LOW);
      digitalWrite(relay1, HIGH);
      button1old = button1state;                     
      break;
    case 3:
      digitalWrite(redLED, HIGH);
      digitalWrite(relay1, LOW);
      button1old = button1state;                     
      break;
      case 4:
      digitalWrite(redLED, HIGH);
      digitalWrite(relay1, LOW);
      button1old = button1state;                     
      break;
    case 5:
      digitalWrite(redLED, HIGH);
      digitalWrite(relay1, LOW);
      button1old = button1state;                     
      break;
     case 6:
      digitalWrite(redLED, LOW);
      digitalWrite(relay1, HIGH);
      button1old = 0;                   //set old state to zero
      break;
    
     default:                           //if state is not 1-5
      digitalWrite(redLED, LOW);        //redLED ON
      digitalWrite(relay1, HIGH);
      button1old = 0;                   //reset relay1 to off
      break;
  }
    
  //Button 2 instructions:  
    
  //debouncing routine to read button2
   button2Poll = digitalRead(button2);   //poll the state of button2
  if (button2Poll == 1) {                //check if it has been pressed
    delay(100);                          //wait 100ms
    button2Poll = digitalRead(button2);  //poll button again
    if (button2Poll == 0) {              // if 0 - considered one press
      button2state = button2old + 1;     //increase state by 1
    }
  } else {                               //if button2 has not been pressed
    delay(100);                          //wait 100ms
  }
  switch (button2state) {               //react to button2 press & state
    case 1:                             //if button2state is 1
      //digitalWrite(redLED, HIGH);     //red LED off
      digitalWrite(relay2, LOW);        //relay2 on
      button2old = button2state;        //set old state to state
      break;
    case 2:
      //digitalWrite(redLED, LOW);
      digitalWrite(relay2, HIGH);
      button2old = 0;                   //set old state to zero
      break;
        
    default:                            //if state is not 1
      digitalWrite(relay2, HIGH);       //reset relay2 to off           
      button2old = 0;             
      break;

  }
    }

Make sure you are not using the serial pins

Look at detecting state change

Delays are bad for buttons

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