#include #include #include "MHZ19.h" const int rx_pin = 2; // connect to TX on MHZ19 const int tx_pin = 3; // connect to RX on MHZ19 const int led_green_pin = 4; const int led_yellow_pin = 5; const int led_red_pin = 6; const int buzzer_pin = 13; const int co2_warning_thr = 1000; const int co2_alarm_thr = 1500; MHZ19 mhz19 = MHZ19(rx_pin,tx_pin); LiquidCrystal lcd(7, 8, 9, 10, 11, 12); unsigned long time; int lastppm = 0; void setup() { Serial.begin(115200); Serial.println("Time,CO2,Temp"); // MH-Z19 mhz19.begin(rx_pin, tx_pin); // LCD lcd.begin(16,2); lcd.setCursor(0,0); lcd.print("Airing Butler"); lcd.setCursor(0,1); lcd.print("says hello!"); // LEDs + buzzer 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); digitalWrite(led_yellow_pin, HIGH); delay(500); digitalWrite(led_yellow_pin, LOW); digitalWrite(led_red_pin, HIGH); delay(500); digitalWrite(led_red_pin, LOW); digitalWrite(buzzer_pin, HIGH); delay(200); digitalWrite(buzzer_pin, LOW); lcd.clear(); } void loop() { time = millis(); measurement_t m = mhz19.getMeasurement(); Serial.print(time); Serial.print(","); Serial.print(m.co2_ppm); Serial.print(","); Serial.println(m.temperature); digitalWrite(led_red_pin, m.co2_ppm >= co2_alarm_thr); digitalWrite(led_yellow_pin, m.co2_ppm >= co2_warning_thr && m.co2_ppm < co2_alarm_thr); digitalWrite(led_green_pin, m.co2_ppm < co2_warning_thr); if (m.co2_ppm >= 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); } if (m.co2_ppm >= co2_warning_thr && lastppm < co2_warning_thr) { digitalWrite(buzzer_pin, HIGH); delay(500); digitalWrite(buzzer_pin, LOW); } lcd.setCursor(0, 0); lcd.print("CO2: "); lcd.print(m.co2_ppm); lcd.print(" ppm "); lastppm = m.co2_ppm; delay(5000); }