add a "cooldown time"
authorgregor herrmann <gregor@toastfreeware.priv.at>
Sun, 1 Nov 2020 01:51:58 +0000 (02:51 +0100)
committergregor herrmann <gregor@toastfreeware.priv.at>
Sun, 1 Nov 2020 01:51:58 +0000 (02:51 +0100)
don't warn more often than once per time period (currently one minute),
to avoid constant beeping when the co₂ value flaps around the threshold.

airingbutler.ino

index b4579e6fe78e2a46ec31fb07fdd016c51364a722..92461a63cd8f94d5ba5de40d0532ac569c373f7c 100644 (file)
@@ -14,12 +14,14 @@ const int buzzer_pin = 13;
 const int co2_warning_thr = 1000;
 const int co2_alarm_thr   = 1500;
 
-const unsigned long warmuptime = 60000; // 1 min.
+const unsigned long warmuptime   = 60000; // 1 min.
+const unsigned long cooldowntime = 60000; // 1 min.
 
 MHZ19 mhz19 = MHZ19(rx_pin,tx_pin);
 LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
 
 unsigned long time;
+unsigned long lastwarntime = 0;
 int co2 = 0;
 int temp = 0;
 int lastppm = 0;
@@ -87,12 +89,14 @@ void loop()
        digitalWrite(led_yellow_pin, co2 >= co2_warning_thr && co2 < co2_alarm_thr);
        digitalWrite(led_green_pin, co2 < co2_warning_thr);
 
-       if (co2 >= co2_alarm_thr && lastppm < co2_alarm_thr) {
+       if (co2 >= co2_alarm_thr && lastppm < co2_alarm_thr && time - lastwarntime > cooldowntime) {
                buzz(100, 3);
+               lastwarntime = time;
        }
 
-       if (co2 >= co2_warning_thr && lastppm < co2_warning_thr) {
+       if (co2 >= co2_warning_thr && lastppm < co2_warning_thr && time - lastwarntime > cooldowntime) {
                buzz(500, 1);
+               lastwarntime = time;
        }
 
        lcd.setCursor(0, 0);