#include <DHT.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
DHT dht(14, DHT22);
int pinRed = 33;
int pinWhite = 25;
int pinBlue = 26;
int pinbuz = 27;
int chanbuz = 0;
bool isBuzzerOn = false;
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT , &Wire, -1);
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(pinWhite, OUTPUT);
pinMode(pinBlue, OUTPUT);
pinMode(pinRed, OUTPUT);
dht.begin();
ledcAttachPin(pinbuz, chanbuz);
oled.begin(SSD1306_SWITCHCAPVCC, 0x3c);
}
void oled_info(float tempC, float tempK, float tempF, float hum){
oled.clearDisplay();
oled.setTextSize(1);
oled.setTextColor(WHITE);
oled.setCursor(0,20);
oled.print("C: ");
oled.println(tempC);
oled.setCursor(0,30);
oled.print("F: ");
oled.println(tempF);
oled.setCursor(0,40);
oled.print("K: ");
oled.println(tempK);
oled.print("Hum: ");
oled.println(hum);
oled.display();
}
void loop() {
delay(50);
float tempC = dht.readTemperature();
float tempK = tempC + 273.15;
float tempF = (tempC * 9.0 / 5.0) + 32.0;
float hum = dht.readHumidity();
if (tempC <= 15 && hum <= 10){
digitalWrite(pinBlue, LOW);
digitalWrite(pinRed, LOW);
digitalWrite(pinWhite, HIGH);
isBuzzerOn = true;
oled_info(tempC, tempK, tempF, hum);
}else if ( (tempC >= 16 && tempC <= 27) && (hum >= 11 && hum <= 50) ){
isBuzzerOn = false;
digitalWrite(pinBlue, HIGH);
digitalWrite(pinRed, LOW);
digitalWrite(pinWhite, LOW);
oled_info(tempC, tempK, tempF, hum);
}else if (tempC > 27 && hum >= 51){
isBuzzerOn = true;
digitalWrite(pinBlue, LOW);
digitalWrite(pinRed, HIGH);
digitalWrite(pinWhite, LOW);
oled_info(tempC, tempK, tempF, hum);
}else{
isBuzzerOn = false;
digitalWrite(pinBlue, LOW);
digitalWrite(pinRed, LOW);
digitalWrite(pinWhite, LOW);
oled.clearDisplay();
oled.setTextSize(1);
oled.setTextColor(WHITE);
oled.setCursor(3,10);
oled.println("Menyaala Abaanggkuuh!!");
oled.display();
}
if (isBuzzerOn) {
for (int i = 0; i < 3; i++) {
ledcWriteTone(chanbuz, 5000);
delay(50);
ledcWriteTone(chanbuz, 0);
delay(50);
}
}
}