const uint8_t ledPin = LED_BUILTIN;
const uint8_t buzzerPin = 12;
const uint8_t sliderPin = A0;
const uint8_t levelMin = 30;
void setup()
{
Serial.begin( 115200 );
pinMode( ledPin, OUTPUT );
delay( 50 );
}
void loop()
{
uint32_t now = millis();
uint8_t level = map( analogRead( sliderPin ), 0, 1023, 0, 100 );
static bool alarm = false;
static bool alarmTimer = false;
static uint32_t alarmTime = 0;
if ( alarm == false )
{
if ( level < levelMin )
{
alarm = true;
alarmTimer = true;
alarmTime = now;
tone( buzzerPin, 2000 );
Serial.println( "level < levelMin" );
}
}
else
{
if ( level >= levelMin )
{
alarm = false;
noTone( buzzerPin );
digitalWrite( ledPin, LOW );
Serial.println( "level >= levelMin" );
}
else if ( alarmTimer == true && now - alarmTime >= 5000UL )
{
alarmTimer = false;
noTone( buzzerPin );
digitalWrite( ledPin, HIGH );
}
}
}