#include "DHT.h"
#include <RTClib.h>
#include <EEPROM.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.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)
Adafruit_SSD1306 lcd(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
RTC_DS1307 rtc;
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define merah 8
#define kuning 7
#define hijau 6
#define tombol_tambah 10
#define tombol_menu 11
#define tombol_kurang 12
#define add_jam_nyala 0
#define add_menit_nyala 1
#define add_jam_padam 2
#define add_menit_padam 3
byte h,menu,jam,menit,detik,tanggal,bulan;
byte jam_nyala,menit_nyala,jam_padam,menit_padam;
int tahun;
float t;
char buff[20];
void setup() {
Serial.begin(9600);
if(!lcd.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
lcd.display(); delay(2000); // Pause for 2 seconds
lcd.clearDisplay();
pinMode(merah,OUTPUT);
pinMode(kuning,OUTPUT);
pinMode(hijau,OUTPUT);
pinMode(tombol_tambah, INPUT_PULLUP);
pinMode(tombol_menu, INPUT_PULLUP);
pinMode(tombol_kurang, INPUT_PULLUP);
Serial.println("ARduino Ready...");
//rtc.adjust(DateTime(2025,1,13,10,10,10));
jam_nyala = EEPROM.read(add_jam_nyala);
menit_nyala = EEPROM.read(add_menit_nyala);
dht.begin();
lcd.setTextSize(1); // Normal 1:1 pixel scale
lcd.setTextColor(SSD1306_WHITE); // Draw white text
}
void loop() {
if(digitalRead(tombol_menu)==LOW) {
while(digitalRead(tombol_menu)==LOW) {}
menu++;
}
if(menu==0) {
DateTime now = rtc.now();
jam = now.hour();
menit = now.minute();
detik = now.second();
tanggal = now.day();
bulan = now.month();
tahun = now.year();
h = dht.readHumidity();
t = dht.readTemperature();
Serial.print("Suhu="); Serial.print(t); Serial.print(" Celcius, ");
Serial.print("Kelembaban="); Serial.print(h); Serial.println("%");
if (jam==14 && menit==59 && detik==10) digitalWrite(merah,HIGH);
else if(jam==14 && menit==59 && detik==25) digitalWrite(merah,LOW);
if (jam==jam_nyala && menit==menit_nyala) digitalWrite(merah,HIGH);
else if(jam==jam_padam && menit==menit_padam) digitalWrite(merah,LOW);
if(detik%10==0) {
lcd.clearDisplay();
lcd.setCursor(0,0);
lcd.print("T="); lcd.print(t,1); lcd.write(0xdf); lcd.print("C ");
lcd.print("H="); lcd.print(h); lcd.print("% ");
sprintf(buff," TGL %02d-%02d-%04d ",tanggal,bulan,tahun);
lcd.setCursor(0,9);
lcd.display();
delay(3000);
}
else {
lcd.clearDisplay();
lcd.setCursor(0,0); lcd.print(" JAM DIGITAL ");
sprintf(buff,"JAM %02d:%02d:%02d WIB",jam,menit,detik);
lcd.setCursor(0,9); lcd.print(String(buff));
lcd.display();
delay(500);
}
// /////////////////////////////////////
// if(digitalRead(tombol_tambah)==LOW) {
// lcd.setCursor(0,0); lcd.print(" LAMPU OTOMATIS ");
// sprintf(buff,"NYALA> %02d:%02d WIB",jam_nyala,menit_nyala);
// lcd.setCursor(0,1); lcd.print(buff);
// delay(3000);
// }
// if(digitalRead(tombol_kurang)==LOW) {
// lcd.setCursor(0,0); lcd.print(" LAMPU OTOMATIS ");
// sprintf(buff,"PADAM> %02d:%02d WIB",jam_padam,menit_padam);
// lcd.setCursor(0,1); lcd.print(buff);
// delay(3000);
// }
}
// else if(menu==1) {
// lcd.setCursor(0,0); lcd.print(" SETTING JAM ");
// if(digitalRead(tombol_tambah)==LOW) {
// if(jam<23) jam++;
// else jam=0;
// }
// else if(digitalRead(tombol_kurang)==LOW) {
// if(jam>0) jam--;
// else jam=23;
// }
// sprintf(buff,"JAM %02d:%02d:%02d WIB",jam,menit,detik);
// lcd.setCursor(0,1); lcd.print(buff); delay(100);
// sprintf(buff,"JAM :%02d:%02d WIB",menit,detik);
// lcd.setCursor(0,1); lcd.print(buff); delay(100);
// rtc.adjust(DateTime(tahun,bulan,tanggal,jam,menit,detik));
// }
// else if(menu==2) {
// lcd.setCursor(0,0); lcd.print(" SETTING MENIT ");
// if(digitalRead(tombol_tambah)==LOW) {
// if(menit<59) jam++;
// else menit=0;
// }
// else if(digitalRead(tombol_kurang)==LOW) {
// if(menit>0) menit--;
// else menit=59;
// }
// sprintf(buff,"JAM %02d:%02d:%02d WIB",jam,menit,detik);
// lcd.setCursor(0,1); lcd.print(buff); delay(100);
// sprintf(buff,"JAM %02d: :%02d WIB",jam,detik);
// lcd.setCursor(0,1); lcd.print(buff); delay(100);
// rtc.adjust(DateTime(tahun,bulan,tanggal,jam,menit,detik));
// }
// else if(menu==3) {
// lcd.setCursor(0,0); lcd.print(" SETTING TANGGAL ");
// if(digitalRead(tombol_tambah)==LOW) {
// tanggal++;
// if(tanggal>31) tanggal=1;
// }
// else if(digitalRead(tombol_kurang)==LOW) {
// tanggal--;
// if(tanggal<1) tanggal=31;
// }
// sprintf(buff," TGL %02d-%02d-%04d ",tanggal,bulan,tahun);
// lcd.setCursor(0,1); lcd.print(buff); delay(100);
// sprintf(buff," TGL -%02d-%04d ",bulan,tahun);
// lcd.setCursor(0,1); lcd.print(buff); delay(100);
// rtc.adjust(DateTime(tahun,bulan,tanggal,jam,menit,detik));
// }
// else if(menu==4) {
// lcd.setCursor(0,0); lcd.print(" SETTING TANGGAL ");
// if(digitalRead(tombol_tambah)==LOW) {
// bulan++;
// if(bulan>12) bulan=1;
// }
// else if(digitalRead(tombol_kurang)==LOW) {
// bulan--;
// if(bulan<1) bulan=12;
// }
// sprintf(buff," TGL %02d-%02d-%04d ",tanggal,bulan,tahun);
// lcd.setCursor(0,1); lcd.print(buff); delay(100);
// sprintf(buff," TGL %02d- -%04d ",tanggal,tahun);
// lcd.setCursor(0,1); lcd.print(buff); delay(100);
// rtc.adjust(DateTime(tahun,bulan,tanggal,jam,menit,detik));
// }
// else if(menu==5) {
// lcd.setCursor(0,0); lcd.print(" SETTING TAHUN ");
// if(digitalRead(tombol_tambah)==LOW) {
// if(tahun>=2020) tahun++;
// else tahun=2020;
// }
// else if(digitalRead(tombol_kurang)==LOW) {
// tahun--;
// if(tahun<2020) tahun=2020;
// }
// sprintf(buff," TGL %02d-%02d-%04d ",tanggal,bulan,tahun);
// lcd.setCursor(0,1); lcd.print(buff); delay(100);
// sprintf(buff," TGL %02d-%02d- ",tanggal,bulan);
// lcd.setCursor(0,1); lcd.print(buff); delay(100);
// rtc.adjust(DateTime(tahun,bulan,tanggal,jam,menit,detik));
// }
// else if(menu==6) {
// lcd.setCursor(0,0); lcd.print(" SET JAM NYALA ");
// if(digitalRead(tombol_tambah)==LOW) {
// if(jam_nyala<23) jam_nyala++;
// else jam_nyala=0;
// }
// else if(digitalRead(tombol_kurang)==LOW) {
// if(jam_nyala>0) jam_nyala--;
// else jam_nyala=23;
// }
// sprintf(buff,"LAMPU> %02d:%02d WIB",jam_nyala,menit_nyala);
// lcd.setCursor(0,1); lcd.print(buff); delay(100);
// sprintf(buff,"LAMPU> :%02d WIB",menit_nyala);
// lcd.setCursor(0,1); lcd.print(buff); delay(100);
// EEPROM.write(add_jam_nyala,jam_nyala);
// }
// else if(menu==7) {
// lcd.setCursor(0,0); lcd.print(" SET MENIT NYALA ");
// if(digitalRead(tombol_tambah)==LOW) {
// if(menit_nyala<59) menit_nyala++;
// else menit_nyala=0;
// }
// else if(digitalRead(tombol_kurang)==LOW) {
// if(menit_nyala>0) menit_nyala--;
// else menit_nyala=59;
// }
// sprintf(buff,"LAMPU> %02d:%02d WIB",jam_nyala,menit_nyala);
// lcd.setCursor(0,1); lcd.print(buff); delay(100);
// sprintf(buff,"LAMPU> %02d: WIB",jam_nyala);
// lcd.setCursor(0,1); lcd.print(buff); delay(100);
// EEPROM.write(add_menit_nyala,menit_nyala);
// }
// else if(menu==8) {
// lcd.setCursor(0,0); lcd.print(" SET JAM PADAM ");
// if(digitalRead(tombol_tambah)==LOW) {
// if(jam_padam<23) jam_padam++;
// else jam_padam=0;
// }
// else if(digitalRead(tombol_kurang)==LOW) {
// if(jam_padam>0) jam_padam--;
// else jam_padam=23;
// }
// sprintf(buff,"LAMPU> %02d:%02d WIB",jam_padam,menit_padam);
// lcd.setCursor(0,1); lcd.print(buff); delay(100);
// sprintf(buff,"LAMPU> :%02d WIB",menit_padam);
// lcd.setCursor(0,1); lcd.print(buff); delay(100);
// }
// else if(menu==9) {
// lcd.setCursor(0,0); lcd.print(" SET MENIT PADAM ");
// if(digitalRead(tombol_tambah)==LOW) {
// if(menit_padam<59) menit_padam++;
// else menit_padam=0;
// }
// else if(digitalRead(tombol_kurang)==LOW) {
// if(menit_padam>0) menit_padam--;
// else menit_padam=59;
// }
// sprintf(buff,"LAMPU> %02d:%02d WIB",jam_padam,menit_padam);
// lcd.setCursor(0,1); lcd.print(buff); delay(100);
// sprintf(buff,"LAMPU> %02d: WIB",jam_padam);
// lcd.setCursor(0,1); lcd.print(buff); delay(100);
// }
else menu=0;
}