#include <GyverButton.h>
#define BTN_PIN 3
bool blinkFlag = 0, alarmFlag = 0, spectatorFlag = 0;
int sensor_in = 7, alarm_pin = 13, sensor_dat = 0, duration_pin = 0, duration_time = 0, duration_block = 0, led_spec_pin = 12, led_standby_pin = 10, buttonFlag = 0;
unsigned long timer1, timerBlink;
GButton button(BTN_PIN);
void setup()
{
pinMode(A0, INPUT);
pinMode(sensor_in, INPUT);
pinMode(alarm_pin, OUTPUT);
pinMode(led_spec_pin, OUTPUT);
pinMode(led_standby_pin, OUTPUT);
}
void loop()
{
button.tick();
sensor_dat = digitalRead(sensor_in);
duration_pin = analogRead(A0);
duration_time = map(duration_pin, 0, 1023, 2000, 10000);
if (button.isClick() && !alarmFlag && buttonFlag == 0)
{
duration_block = duration_time;
spectatorFlag = 1;
digitalWrite(led_spec_pin, HIGH);
digitalWrite(led_standby_pin, LOW);
buttonFlag = 1;
timer1 = millis();
}
else if (button.isClick() && buttonFlag == 1)
{
alarmFlag = 0;
buttonFlag = 0;
spectatorFlag = 0;
digitalWrite(led_spec_pin, LOW);
}
if (spectatorFlag && millis() - timer1 > duration_block)
{
alarmFlag = 1;
}
else if (!sensor_dat)
{
timer1 = millis();
}
if (alarmFlag)
{
digitalWrite(alarm_pin, blinkFlag);
digitalWrite(led_spec_pin, LOW);
}
if (millis() - timerBlink > 350)
{
blinkFlag = !blinkFlag;
timerBlink = millis();
}
else if (!spectatorFlag)
{
digitalWrite(alarm_pin, LOW);
digitalWrite(led_standby_pin, HIGH);
}
}