#include "DHT.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED width, in pixels
#define SCREEN_HEIGHT 64 // OLED height, in pixels
#define DHTPIN 12     
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
#define buzzer 32
#define LED 25          // Pin for LED

DHT dht(DHTPIN, DHTTYPE);
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(buzzer, OUTPUT);
  
  Serial.begin(115200);
  dht.begin();

  if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("ไม่สามารถเชื่อมต่อกับจอได้"));
    while (1);
  }
}

void loop() {
  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();

  if (isnan(temperature) || isnan(humidity)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  delay(2000);       

  oled.clearDisplay(); 

  oled.setTextSize(1);        
  oled.setTextColor(WHITE);  
  oled.setCursor(0, 0);   
  oled.print("Humidity: " + String(humidity, 2) + "%"); 

  oled.setCursor(0, 10);     
  oled.print("Temperature: " + String(temperature, 2) + "C ");
  
  oled.display();          
  
  if (humidity < 70) {
    tone(buzzer, 500);       
  } else {
    noTone(buzzer);           
  }

  if (temperature > 28) {
    digitalWrite(LED, HIGH); 
  } else {
    digitalWrite(LED, LOW);   
  }
}