#include <DHT.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define DHTPIN 7
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define SSD1306_I2C_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
float hum;
float temp;
const int HigherTemp = 27;
const int LowerTemp = 15;
enum State {
Red,
Green,
Blue
};
State currentState ;
const int LED1_Red = 2;
const int LED2_Blue = 4;
const int LED3_Green = 3;
void setup() {
Serial.begin(9600);
pinMode(LED1_Red, OUTPUT);
pinMode(LED2_Blue, OUTPUT);
pinMode(LED3_Green, OUTPUT);
dht.begin();
Wire.begin();
if (!display.begin(SSD1306_SWITCHCAPVCC, SSD1306_I2C_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.display();
}
void loop() {
hum = dht.readHumidity();
temp = dht.readTemperature();
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println(temp);
display.display();
if (temp >= LowerTemp && temp <= HigherTemp) {
currentState = Green;
} else if (temp < LowerTemp) {
currentState = Blue;
} else if (temp > HigherTemp) {
currentState = Red;
}
switch (currentState) {
case Green:
digitalWrite(LED1_Red, LOW);
digitalWrite(LED2_Blue, LOW);
digitalWrite(LED3_Green, HIGH);
delay (2000);
break;
case Blue:
digitalWrite(LED1_Red, LOW);
digitalWrite(LED2_Blue, HIGH);
digitalWrite(LED3_Green, LOW);
delay (2000);
break;
case Red:
digitalWrite(LED1_Red, HIGH);
digitalWrite(LED2_Blue, LOW);
digitalWrite(LED3_Green, LOW);
delay (2000);
break;
}
}