X-Git-Url: https://git.toastfreeware.priv.at/toast/airingbutler.git/blobdiff_plain/98afd689deb5007a2d2cfba2f627e094d016b853..f0647e8832273802c122d2484528a70bf3414090:/airingbutler.ino diff --git a/airingbutler.ino b/airingbutler.ino index 68cd95d..a330864 100644 --- a/airingbutler.ino +++ b/airingbutler.ino @@ -14,14 +14,26 @@ 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 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; +void buzz(unsigned long pause, int count) { + for (int i = 0; i <= count; i++) { + digitalWrite(buzzer_pin, HIGH); + delay(pause); + digitalWrite(buzzer_pin, LOW); + if (i < count - 1) delay(pause); + } +} void setup() { @@ -32,17 +44,16 @@ void setup() mhz19.begin(rx_pin, tx_pin); // LCD - lcd.begin(16,2); - lcd.setCursor(0,0); + lcd.begin(16, 2); + lcd.setCursor(0, 0); lcd.print("Airing Butler"); - lcd.setCursor(0,1); + lcd.setCursor(0, 1); lcd.print("says hello!"); - // LEDs + buzzer + // LEDs pinMode(led_green_pin, OUTPUT); pinMode(led_yellow_pin, OUTPUT); pinMode(led_red_pin, OUTPUT); - pinMode(buzzer_pin, OUTPUT); digitalWrite(led_green_pin, HIGH); delay(500); digitalWrite(led_green_pin, LOW); @@ -52,9 +63,10 @@ void setup() digitalWrite(led_red_pin, HIGH); delay(500); digitalWrite(led_red_pin, LOW); - digitalWrite(buzzer_pin, HIGH); - delay(200); - digitalWrite(buzzer_pin, LOW); + + // buzzer + pinMode(buzzer_pin, OUTPUT); + buzz(200, 1); lcd.clear(); } @@ -73,34 +85,39 @@ void loop() Serial.print(","); Serial.println(temp); + // LEDs digitalWrite(led_red_pin, co2 >= co2_alarm_thr); 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) { - digitalWrite(buzzer_pin, HIGH); - delay(100); - digitalWrite(buzzer_pin, LOW); - delay(100); - digitalWrite(buzzer_pin, HIGH); - delay(100); - digitalWrite(buzzer_pin, LOW); - delay(100); - digitalWrite(buzzer_pin, HIGH); - delay(100); - digitalWrite(buzzer_pin, LOW); + // LCD + if (time < warmuptime && (co2 == -1 || co2 == 410)) { + lcd.begin(16, 2); + lcd.setCursor(0, 0); + lcd.print("Airing Butler"); + lcd.setCursor(0, 1); + lcd.print("is warming up..."); + } else { + lcd.begin(16 ,2); + lcd.setCursor(0, 0); + lcd.print("CO2: "); + lcd.print(co2); + lcd.print(" ppm "); + lcd.setCursor(0, 1); + lcd.print("Temp: "); + lcd.print(temp); + lcd.print(" C +/- "); } - if (co2 >= co2_warning_thr && lastppm < co2_warning_thr) { - digitalWrite(buzzer_pin, HIGH); - delay(500); - digitalWrite(buzzer_pin, LOW); + // buzzer + 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 && time - lastwarntime > cooldowntime) { + buzz(500, 1); + lastwarntime = time; } - - lcd.setCursor(0, 0); - lcd.print("CO2: "); - lcd.print(co2); - lcd.print(" ppm "); lastppm = co2; delay(5000);