Makefile: log target: filter out "Finished" lines as well
[toast/airingbutler.git] / airingbutler.ino
1 #include <SoftwareSerial.h>
2 #include <LiquidCrystal.h>
3 #include "MHZ19.h"
4
5 const int rx_pin = 2; // connect to TX on MHZ19
6 const int tx_pin = 3; // connect to RX on MHZ19
7
8 const int led_green_pin  = 4;
9 const int led_yellow_pin = 5;
10 const int led_red_pin    = 6;
11
12 const int buzzer_pin = 13;
13
14 const int co2_warning_thr = 1000;
15 const int co2_alarm_thr   = 1500;
16
17 MHZ19 mhz19 = MHZ19(rx_pin,tx_pin);
18 LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
19
20 unsigned long time;
21 int co2 = 0;
22 int temp = 0;
23 int lastppm = 0;
24
25 void buzz(unsigned long pause, int count) {
26         for (int i = 0; i <= count; i++) {
27                 digitalWrite(buzzer_pin, HIGH);
28                 delay(pause);
29                 digitalWrite(buzzer_pin, LOW);
30                 if (i < count - 1) delay(pause);
31         }
32 }
33
34 void setup()
35 {
36         Serial.begin(115200);
37         Serial.println("Time,CO2,Temp");
38
39         // MH-Z19
40         mhz19.begin(rx_pin, tx_pin);
41
42         // LCD
43         lcd.begin(16, 2);
44         lcd.setCursor(0, 0);
45         lcd.print("Airing Butler");
46         lcd.setCursor(0, 1);
47         lcd.print("says hello!");
48
49         // LEDs
50         pinMode(led_green_pin, OUTPUT);
51         pinMode(led_yellow_pin, OUTPUT);
52         pinMode(led_red_pin, OUTPUT);
53         digitalWrite(led_green_pin, HIGH);
54         delay(500);
55         digitalWrite(led_green_pin, LOW);
56         digitalWrite(led_yellow_pin, HIGH);
57         delay(500);
58         digitalWrite(led_yellow_pin, LOW);
59         digitalWrite(led_red_pin, HIGH);
60         delay(500);
61         digitalWrite(led_red_pin, LOW);
62
63         // buzzer
64         pinMode(buzzer_pin, OUTPUT);
65         buzz(200, 1);
66
67         lcd.clear();
68 }
69
70
71 void loop()
72 {
73         time = millis();
74         measurement_t m = mhz19.getMeasurement();
75         co2 = m.co2_ppm;
76         temp = m.temperature;
77
78         Serial.print(time);
79         Serial.print(",");
80         Serial.print(co2);
81         Serial.print(",");
82         Serial.println(temp);
83
84         digitalWrite(led_red_pin, co2 >= co2_alarm_thr);
85         digitalWrite(led_yellow_pin, co2 >= co2_warning_thr && co2 < co2_alarm_thr);
86         digitalWrite(led_green_pin, co2 < co2_warning_thr);
87
88         if (co2 >= co2_alarm_thr && lastppm < co2_alarm_thr) {
89                 buzz(100, 3);
90         }
91
92         if (co2 >= co2_warning_thr && lastppm < co2_warning_thr) {
93                 buzz(500, 1);
94         }
95
96         lcd.setCursor(0, 0);
97         lcd.print("CO2: ");
98         lcd.print(co2);
99         lcd.print(" ppm    ");
100         lcd.setCursor(0, 1);
101         lcd.print("Temp: ");
102         lcd.print(temp);
103         lcd.print(" C +/-  ");
104
105         lastppm = co2;
106         delay(5000);
107 }