Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <DHT.h>
- #include <LiquidCrystal_I2C.h>
- #define DHT_PIN 2
- #define DHT_TYPE DHT22
- #define LCD_WIDTH 16
- #define LCD_HEIGHT 2
- #define BACKLIGHT_PIN 3
- #define IS_FAHRENHEIT false
- #define DEGREE_SYMBOL (char)0xdf
- // all intervals are in milliseconds
- #define UPDATE_INTERVAL 2000
- #define BACKLIGHT_ON_INTERVAL 10000
- #define FLIP_TO_HI_INTERVAL 5000
- DHT dht(DHT_PIN, DHT_TYPE);
- LiquidCrystal_I2C lcd(0x27, LCD_WIDTH, LCD_HEIGHT);
- bool backlight_on, read_data, read_failed, flip_to_hi;
- unsigned long backlight_time, data_read_time, last_flip_time;
- void setup() {
- pinMode(BACKLIGHT_PIN, INPUT_PULLUP);
- lcd.init();
- lcd.backlight();
- lcd.print("Initializing...");
- backlight_on = read_data = true;
- read_failed = flip_to_hi = false;
- backlight_time = data_read_time = 0;
- dht.begin();
- }
- void loop() {
- float temperature, humidity, hi;
- if (read_data) {
- temperature = dht.readTemperature(IS_FAHRENHEIT);
- humidity = dht.readHumidity();
- read_data = false;
- data_read_time = millis();
- // Check if any read fails
- if (isnan(temperature) || isnan(humidity)) {
- lcd.clear();
- lcd.home();
- lcd.print("Failed to read");
- lcd.setCursor(0, 1);
- lcd.print("from DHT sensor");
- read_failed = true;
- } else if (read_failed)
- read_failed = false;
- if (!read_failed) {
- hi = dht.computeHeatIndex(temperature, humidity, IS_FAHRENHEIT);
- lcd.clear();
- if (flip_to_hi) {
- lcd.print("Feel : ");
- lcd.print(hi);
- } else {
- lcd.print("Temp. : ");
- lcd.print(temperature);
- }
- lcd.print(" ");
- lcd.print(DEGREE_SYMBOL);
- if (IS_FAHRENHEIT) lcd.print("F");
- else lcd.print("C");
- lcd.setCursor(0, 1);
- lcd.print("Hum. : ");
- lcd.print(humidity);
- lcd.print(" %");
- }
- } else if (millis() - data_read_time >= UPDATE_INTERVAL)
- read_data = true;
- if (backlight_on) {
- if (!digitalRead(BACKLIGHT_PIN))
- backlight_time = millis();
- else if (millis() - backlight_time >= BACKLIGHT_ON_INTERVAL) {
- lcd.noBacklight();
- backlight_on = false;
- }
- } else if (!digitalRead(BACKLIGHT_PIN)) {
- lcd.backlight();
- backlight_time = millis();
- backlight_on = true;
- }
- if (millis() - last_flip_time >= FLIP_TO_HI_INTERVAL) {
- flip_to_hi = !flip_to_hi;
- last_flip_time = millis();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement