#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <RTClib.h>
#define DHTPIN 26 // กำหนดขา DHT22
#define DHTTYPE DHT22 // กำหนดประเภท DHT
#define OLED_RESET -1 // กำหนดค่ารีเซ็ต OLED
DHT dht(DHTPIN, DHTTYPE);
Adafruit_SSD1306 display(128, 64, &Wire, OLED_RESET);
RTC_DS3231 rtc;
void setup() {
Serial.begin(9600);
// เริ่มต้น DHT22
dht.begin();
// เริ่มต้น OLED
display.begin(SSD1306_SWITCHCAPVCC,0x3C);
display.clearDisplay();
// เริ่มต้น RTC
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (rtc.lostPower()) {
// ตั้งเวลาเริ่มต้นถ้า RTC สูญเสียพลังงาน
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
// อ่านค่าอุณหภูมิและความชื้น
float h = dht.readHumidity();
float t = dht.readTemperature();
// ตรวจสอบว่าค่าอ่านถูกต้องหรือไม่
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// อ่านเวลา
DateTime now = rtc.now();
// แสดงผลบน OLED
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
// แสดงเวลา
display.setCursor(0, 0);
display.print("Time: ");
display.print(now.hour(), DEC);
display.print(':');
display.print(now.minute(), DEC);
display.print(':');
display.print(now.second(), DEC);
// แสดงวันที่ (ถ้าต้องการ)
display.setCursor(0, 16);
display.print("Date: ");
display.print(now.day(), DEC);
display.print('/');
display.print(now.month(), DEC);
display.print('/');
display.print(now.year(), DEC);
// แสดงอุณหภูมิ
display.setCursor(0, 32);
display.print("Temp: ");
display.print(t);
display.print(" C");
// แสดงความชื้น
display.setCursor(0, 48);
display.print("Humidity: ");
display.print(h);
display.print(" %");
// อัปเดตการแสดงผล
display.display();
delay(2000); // รอ 2 วินาที
}