int bzr_pin = 13;
int red_pin = 9;
int grn_pin = 6;
int btn_pin = 2;
int state = 1;
int old_state;
// 1-state: BUZZER: OFF && RGB: RED
// 2-state: BUZZER: TONE && RGB: GREEN
bool btn_val, btn_old_val;
bool isButtonPressed;
unsigned long currentTime, lastTime;
void setup() {
pinMode(bzr_pin, OUTPUT);
pinMode(red_pin, OUTPUT);
pinMode(grn_pin, OUTPUT);
pinMode(btn_pin, INPUT_PULLUP);
}
void loop() {
currentTime = millis();
readButton();
switch(state) {
case 1:
if(isButtonPressed) {
state = 2;
}
digitalWrite(red_pin, HIGH);
digitalWrite(grn_pin, LOW);
noTone(bzr_pin);
break;
case 2:
if(isButtonPressed || currentTime-lastTime>5000) {
state = 1;
}
digitalWrite(red_pin, LOW);
digitalWrite(grn_pin, HIGH);
tone(bzr_pin, 1000);
break;
}
if(state != old_state) {
lastTime = currentTime;
}
old_state = state;
}
void readButton() {
btn_val = !digitalRead(btn_pin);
if (btn_val && !btn_old_val) {
isButtonPressed = true;
}
else {
isButtonPressed = false;
delay(50);
}
btn_old_val = btn_val;
}