#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#include <DHT.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SSD1306_I2C_ADDRESS 0x3C // Replace with your SSD1306 display I2C address
#define DHTTYPE DHT22
#define DHTPIN 12
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
DHT dht(DHTPIN, DHTTYPE);
// classic leds
int redPin = 9,bluePin = 8, greenPin = 7;
// pins for the rgb LED
int rPin = 4, bPin = 3, gPin = 2;
int ButtonUp = 3;
enum ledState {
goodTemperature,
hotTemperature,
coldTemperature
};
ledState state;
int pins[] = {redPin, bluePin, greenPin};
size_t pins_size = sizeof(pins) / sizeof(pins[0]);
void selectLed(int first){
// there will usually be only 1 pin on at a time, the rest will
// be off
for(int i=0; i < pins_size; i++){
if(pins[i] == first)
digitalWrite(pins[i], HIGH);
else
digitalWrite(pins[i], LOW);
}
}
void setup() {
for(int i =0; i < pins_size ; i++){
pinMode(pins[i], OUTPUT);
}
Serial.begin(9600);
Wire.begin(); // Initialize the Wire library
if (!display.begin(SSD1306_SWITCHCAPVCC, SSD1306_I2C_ADDRESS)) { // Initialize the OLED display
Serial.println(F("SSD1306 allocation failed"));
for(;;); // if the display initialization failed, don't proceed
}
display.display();
dht.begin();
}
void loop() {
// Wait a few seconds between measurements.
delay(1000);
float temp = dht.readTemperature();
Serial.print("Temp is : ");
Serial.print(temp);
Serial.println();
// Check if any reads failed and exit early (to try again).
if (isnan(temp) ) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
if(temp >= 15 && temp <= 27 )
state = goodTemperature;
else if (temp > 27)
state = hotTemperature;
else
state = coldTemperature;
switch(state){
case goodTemperature:
selectLed(greenPin);
break;
case hotTemperature:
selectLed(redPin);
break;
case coldTemperature:
selectLed(bluePin);
break;
default:
break;
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print(F("Temp is : "));
display.print(temp);
display.print(" ");
display.print(state == goodTemperature? "GOOD" : state == hotTemperature? "HOT" : "COLD");
display.println();
display.display();
delay(1000);
}