]> ToastFreeware Gitweb - toast/airingbutler.git/blobdiff - airingbutler.ino
reinitialize lcd with .begin() before writing
[toast/airingbutler.git] / airingbutler.ino
index a44685562c49845d0980f24d672a6381a7f0ee69..a3308644643c775820ddd3a0962d92cce4f70708 100644 (file)
@@ -14,11 +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 cooldowntime = 60000; // 1 min.
+
 MHZ19 mhz19 = MHZ19(rx_pin,tx_pin);
 LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
 
 unsigned long time;
-unsigned long warmuptime = 60000; // 1 min.
+unsigned long lastwarntime = 0;
 int co2 = 0;
 int temp = 0;
 int lastppm = 0;
@@ -82,29 +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) {
-               buzz(100, 3);
+       // 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) {
-               buzz(500, 1);
+       // buzzer
+       if (co2 >= co2_alarm_thr && lastppm < co2_alarm_thr && time - lastwarntime > cooldowntime) {
+               buzz(100, 3);
+               lastwarntime = time;
        }
-
-       lcd.setCursor(0, 0);
-       lcd.print("CO2: ");
-       lcd.print(co2);
-       if (time < warmuptime && (co2 == -1 || co2 == 410)) {
-               lcd.print (" (W)");
+       if (co2 >= co2_warning_thr && lastppm < co2_warning_thr && time - lastwarntime > cooldowntime) {
+               buzz(500, 1);
+               lastwarntime = time;
        }
-       lcd.print(" ppm    ");
-       lcd.setCursor(0, 1);
-       lcd.print("Temp: ");
-       lcd.print(temp);
-       lcd.print(" C +/-  ");
 
        lastppm = co2;
        delay(5000);