#include <DHT.h>
#include "display.h"
#include "ratings.hpp"
constexpr uint8_t good_environement_led_pin = 2;
constexpr uint8_t acceptable_environement_led_pin = 3;
constexpr uint8_t bad_environement_led_pin = 4;
constexpr uint8_t lcd_i2c_address = 0x27;
constexpr uint8_t dht_pin = 5;
Display<2, 16> display{lcd_i2c_address};
DHT dht{dht_pin, DHT22};
void setup() {
pinMode(good_environement_led_pin, OUTPUT);
pinMode(acceptable_environement_led_pin, OUTPUT);
pinMode(bad_environement_led_pin, OUTPUT);
display.initialize();
dht.begin();
}
void loop() {
const float celsius = dht.readTemperature();
display.print("Temp: ");
display.print(celsius);
display.print('c');
const float humidity = dht.readHumidity();
display.set_cursor(0, 1);
display.print("Humid: ");
display.print(humidity);
display.print('%');
display.show();
display.clear();
Quality temperature_quality = rate_temperature(celsius);
Quality humidity_quality = rate_humidity(humidity);
Quality environment_quality = worse(
temperature_quality,
humidity_quality
); // Gives the worse of the two qualities.
display_environment_quality(environment_quality);
}
void display_environment_quality(Quality environment_quality) {
switch (environment_quality) {
case Quality::Good: {
digitalWrite(good_environement_led_pin, HIGH);
digitalWrite(acceptable_environement_led_pin, LOW);
digitalWrite(bad_environement_led_pin, LOW);
break;
}
case Quality::Acceptable: {
digitalWrite(good_environement_led_pin, LOW);
digitalWrite(acceptable_environement_led_pin, HIGH);
digitalWrite(bad_environement_led_pin, LOW);
break;
}
case Quality::Bad: {
digitalWrite(good_environement_led_pin, LOW);
digitalWrite(acceptable_environement_led_pin, LOW);
digitalWrite(bad_environement_led_pin, HIGH);
break;
}
}
}