volatile bool led1State = false;
volatile unsigned long btn2PressTime = 0;
volatile unsigned long btn3PressTime = 0;
void setup() {
pinMode(3, OUTPUT);
pinMode(13, OUTPUT);
attachInterrupt(digitalPinToInterrupt(11), button1Pressed, RISING);
attachInterrupt(digitalPinToInterrupt(12), button2Pressed, RISING);
attachInterrupt(digitalPinToInterrupt(2), button3Pressed, RISING);
}
void loop() {
digitalWrite(3, led1State ? HIGH : LOW); // LED1
if (btn2PressTime > 0 && (millis() - btn2PressTime) > 5000) {
btn2PressTime = 0;
}
if (btn3PressTime > 0 && (millis() - btn3PressTime) > 7500) {
btn3PressTime = 0;
}
digitalWrite(13, (btn2PressTime > 0 || btn3PressTime > 0) ? HIGH : LOW); // LED2
}
void button1Pressed() {
led1State = !led1State;
if (!led1State) {
btn2PressTime = 0;
btn3PressTime = 0;
}
}
void button2Pressed() {
btn2PressTime = millis();
}
void button3Pressed() {
btn3PressTime = millis();
}