]> ToastFreeware Gitweb - toast/airingbutler.git/blobdiff - airingbutler.ino
reinitialize lcd with .begin() before writing
[toast/airingbutler.git] / airingbutler.ino
index e3486753e6f2e43c702afc39c689fbf5360d2a34..a3308644643c775820ddd3a0962d92cce4f70708 100644 (file)
@@ -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,38 +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    ");
-       lcd.setCursor(0,1);
-       lcd.print("Temp: ");
-       lcd.print(temp);
-       lcd.print(" C +/-  ");
 
        lastppm = co2;
        delay(5000);