#include <DHT.h>
#include <Wire.h>
#include <RTClib.h>
#define DHTPIN 16 // Pin dimana sensor DHT22 terhubung
#define DHTTYPE DHT22 // Tipe sensor DHT
DHT dht(DHTPIN, DHTTYPE); // Inisialisasi objek DHT
RTC_DS1307 rtc; // Inisialisasi RTC
float temperature = 0;
float humidity = 0;
unsigned long previousMillis1 = 0;
unsigned long previousMillis2 = 0;
unsigned long previousMillis3 = 0;
const long interval = 2100;
const long interval1 = 5000;
const long interval2 = 10000;
const int l1 = 33;
const int l2 = 25;
const int l3 = 26;
const int l4 = 27;
const int pb = 17;
const int pb2 = 5;
bool ld1 = false;
bool ld2 = false;
bool ld3 = false;
bool ld4 = false;
bool ext = false;
bool ext1 = false;
bool auto1 = false;
bool auto2 = false;
bool jadwal1 = false;
bool jadwal2 = false;
bool jadwal3 = false;
bool jadwal4 = false;
bool jadwal5 = false;
bool jadwal6 = false;
float thth1 = 25.00;
float thth2 = 27.00;
float thtl1 = 23.00;
float thtl2 = 24.00;
bool led1State = false;
bool led2State = false;
bool led3State = false;
bool led4State = false;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
dht.begin(); // Mulai sensor DHT
pinMode(l1, OUTPUT);
pinMode(l2, OUTPUT);
pinMode(l3, OUTPUT);
pinMode(l4, OUTPUT);
pinMode(pb, INPUT_PULLUP);
pinMode(pb2, INPUT_PULLUP);
Wire.begin();
rtc.begin();
// Cek apakah RTC sudah berjalan, jika belum, atur waktu default
if (!rtc.isrunning()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
unsigned long currentMillis = millis();
DateTime now = rtc.now();
int spb = digitalRead(pb);
int spb2 = digitalRead(pb2);
if (currentMillis - previousMillis1 >= interval) {
previousMillis1 = currentMillis;
float h = dht.readHumidity();
float t = dht.readTemperature(); // put your main code here, to run repeatedly:
Serial.print("Temp: ");
Serial.print(t);
Serial.print("C");
Serial.print(" ");
Serial.print("Hum: ");
Serial.print(h);
Serial.println("%");
if(t >= thth1){
ext = true;
previousMillis2 = millis();
//auto1 = true;
}
if (t >= thth2){
ext1 = true;
previousMillis3 = millis();
//auto2 = true;
}
if(ext && ( millis() - previousMillis2 >= interval2)){
if(t < thtl1){
ext = false;
//auto1 = false;
}}
if(ext1 && ( millis() - previousMillis3 >= interval1)){
if(t <= thtl2){
ext1 = false;
//auto2 = false;
}}
if(ld1 == true){
Serial.print("led1 on, ");
}
if(ld1 == false){
Serial.print("led1 off, ");
}
if(ld2 == true){
Serial.print("led2 on, ");
}
if(ld2 == false){
Serial.print("led2 off, ");
}
if(ld3 == true){
Serial.print("led3 on, ");
}
if(ld3 == false){
Serial.print("led3 off, ");
}
if(ld4 == true){
Serial.print("led4 on, ");
}
if(ld4 == false){
Serial.println("led4 off, ");
}
}
if(now.minute() >= 45){
Serial.println("st222");
}
if(spb == 0 || now.minute() >= 15){
ld1 = true;
ld2 = true;
ld3 = false;
ld4 = false;
jadwal1 = true;
jadwal2 = false;
}
if(spb2 == 0 || now.minute() >= 30 || now.minute() >= 59){
ld1 = false;
ld2 = false;
ld3 = true;
ld4 = true;
jadwal1 = false;
jadwal2 = true;
}
if (ext == true){
if(ld1 == false && ext == true && jadwal1 == false){
ld1 = true;
Serial.print("status 1");
}
if(ld3 == false && ext == true && jadwal2 == false){
ld3 = true;
Serial.print("status 2");
}
auto1 = true;
}
if (ext1 == true){
if(ld2 == false && ext1 == true && jadwal1 == false){
ld2 = true;
Serial.print("status 3");
}
if(ld4 == false && ext1 == true && jadwal2 == false){
ld4 = true;
Serial.println("status 4");
}
auto2 = true;
}
//-------------------------------------------------------------------//
if (ext == false && auto1 == true){
if(ld1 == true && ext == false && jadwal1 == false){
ld1 = false;
Serial.print("status 1 off");
}
if(ld3 == true && ext == false && jadwal2 == false){
ld3 = false;
Serial.print("status 2 off");
previousMillis2 = currentMillis;
auto1 = false;
}
}
if (ext1 == false && auto2 == true){
if(ld2 == true && ext1 == false && jadwal1 == false){
ld2 = false;
Serial.print("status 3 off");
}
if(ld4 == true && ext1 == false && jadwal2 == false){
ld4 = false;
Serial.println("status 4 off");
auto2 = false;
}
}
if(ld1 == true){
digitalWrite(l1, 1);
}
if(ld1 == false){
digitalWrite(l1, 0);
}
if(ld2 == true){
digitalWrite(l2, 1);
}
if(ld2 == false){
digitalWrite(l2, 0);
}
if(ld3 == true){
digitalWrite(l3, 1);
}
if(ld3 == false){
digitalWrite(l3, 0);
}
if(ld4 == true){
digitalWrite(l4, 1);
}
if(ld4 == false){
digitalWrite(l4, 0);
}
Serial.println();
Serial.print(ext);
Serial.print(" ");
Serial.print(ext1);
Serial.print(" ");
Serial.print(ld1);
Serial.print(" ");
Serial.print(ld2);
Serial.print(" ");
Serial.print(ld3);
Serial.print(" ");
Serial.print(ld4);
Serial.print(" ");
Serial.print(spb);
Serial.print(" ");
Serial.print(spb2);
Serial.print(" ");
Serial.print(jadwal1);
Serial.print(" ");
Serial.println(jadwal2);
Serial.print(now.minute());
Serial.print(":");
Serial.print(now.second());
Serial.println();
delay(500); // this speeds up the simulation
}