#include <Wire.h>
#include <RTClib.h>
#include <DHT.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
RTC_DS3231 rtc;
DHT dht(2, DHT22);
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
Serial.begin(9600);
if (!rtc.begin()) {
Serial.println("Tidak dapat menemukan RTC DS3231. Pastikan koneksi sudah benar!");
while (1);
}
if (rtc.lostPower()) {
Serial.println("RTC kehilangan daya. Atur waktu RTC terlebih dahulu.");
}
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
}
String Day(uint8_t Day){
String DayText;
if (Day==1) DayText="Monday";
if (Day==2) DayText="Tuesday";
if (Day==3) DayText="Wednesday";
if (Day==4) DayText="Thursday";
if (Day==5) DayText="Friday";
if (Day==6) DayText="Saturday";
if (Day==7) DayText="Sunday";
return DayText;
}
String DayMonthYear(uint8_t Day, uint8_t Month, uint16_t Year){
String MonthDayYearText;
if (Month==1) MonthDayYearText="JAN ";
if (Month==2) MonthDayYearText="FEB ";
if (Month==3) MonthDayYearText="MAR ";
if (Month==4) MonthDayYearText="APR ";
if (Month==5) MonthDayYearText="MAY ";
if (Month==6) MonthDayYearText="JUN ";
if (Month==7) MonthDayYearText="JUL ";
if (Month==8) MonthDayYearText="AUG ";
if (Month==9) MonthDayYearText="SEP ";
if (Month==10) MonthDayYearText="OCT ";
if (Month==11) MonthDayYearText="NOV ";
if (Month==12) MonthDayYearText="DEC ";
MonthDayYearText=MonthDayYearText+Day;
if (Day==1)MonthDayYearText=MonthDayYearText+"st ";
if (Day==2)MonthDayYearText=MonthDayYearText+"nd ";
if (Day>2)MonthDayYearText=MonthDayYearText+"th ";
MonthDayYearText=MonthDayYearText+Year;
return MonthDayYearText;
}
String Second(uint8_t x){
String SecondText;
if(x<10) SecondText="0";
else SecondText="";
SecondText=SecondText+x;
return SecondText;
}
String HourMinute(uint8_t h, uint8_t i ){
String HourMinuteText="";
HourMinuteText=HourMinuteText + Second(h) +":"+Second(i);
return HourMinuteText;
}
void loop() {
DateTime now = rtc.now();
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
display.fillRect(0, 0, 128, 16, SSD1306_WHITE);
display.fillRect(0, 16, 128, 28, SSD1306_BLACK);
display.fillRect(0, 28, 128, 46, SSD1306_WHITE);
display.fillRect(0, 46, 128, 64, SSD1306_BLACK);
display.setCursor(1, 1);
display.setTextSize(2);
display.setTextColor(SSD1306_BLACK);
display.print(Day(now.dayOfTheWeek()));
display.setCursor(1, 18);
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.print(DayMonthYear(now.day(), now.month(), now.year()));
display.setCursor(15, 30);
display.setTextSize(2);
display.setTextColor(SSD1306_BLACK);
display.print(HourMinute(now.hour(), now.minute()));
display.setCursor(75, 30);
display.setTextSize(2);
display.setTextColor(SSD1306_BLACK);
display.println(":");
display.setCursor(87, 30);
display.setTextSize(2);
display.setTextColor(SSD1306_BLACK);
display.println(Second(now.second()));
display.setCursor(0, 48);
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.println("Temp");
display.setCursor(25, 48);
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.print(temperature);
display.setCursor(56, 46);
display.setTextSize(1);
display.print("o");
display.setCursor(64, 48);
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.println("Humi");
display.setCursor(90, 48);
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.print(humidity);
display.setCursor(121, 47);
display.setTextSize(1);
display.print("%");
display.display();
delay(1000);
}