#include <Wire.h> // rtc
#include "RTClib.h" 

RTC_DS3231 rtc;
DateTime t;

long time1=((long)6*3600)+((long)0*60)+0; // jam 06:00:00
long time2=((long)10*3600)+((long)0*60)+0; // jam 10:00:00
long time3=((long)15*3600)+((long)0*60)+0; // jam 15:00:00
long time4=((long)18*3600)+((long)0*60)+0; // jam 18:00:00

/*
long time1=((long)6*3600)+((long)50*60)+0; // jam 6
long time2=((long)20*3600)+((long)12*60)+0; // jam 10
long time3=((long)20*3600)+((long)13*60)+0; // jam 15
long time4=((long)22*3600)+((long)0*60)+0; // jam 18
*/
//hujan &lampu
int lampu = 4;
int hujan = A1;
int nilai;
int batas = 700;

// buat motor
int sensorvalue =A0;
int sensor;
int IN_1 = 5;
int IN_2 = 6;
int ENA = 9;
int potensio;

bool lampuNyala;
bool atapTerbuka;
bool sedangHujan;
long waktuHujan;

void setup() {
  lampuNyala=false;
  atapTerbuka=false;
 Serial.begin(9600);//baca serial monitor
 pinMode(lampu, OUTPUT);
 pinMode(hujan,INPUT);
 pinMode(IN_1,OUTPUT);
 pinMode(IN_2,OUTPUT);
 pinMode(ENA,OUTPUT);
 digitalWrite(lampu,LOW); // lampu mati
 sedangHujan=false;
 waktuHujan=(long)24*3600+1;
 
 // RTC
 if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }
if (rtc.lostPower()) {
    Serial.println("RTC lost power, lets set the time!");
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }
}

void loop() {
// motor
sensor = analogRead(sensorvalue);
// map nilai sensor 0- 255
potensio = map(sensor,0,1023,0,255);
// gunakan nilai sensor untuk mengontrol putaran motor
analogWrite(ENA,potensio);
Serial.println(potensio); // utk baca diserial monitor
// RTC jam,menit,detik
t = rtc.now();   
Serial.print(t.hour(), DEC);
Serial.print(':');
Serial.print(t.minute(), DEC);
Serial.print(':');
Serial.print(t.second(), DEC);
Serial.println();
Serial.println(atapTerbuka);
long currentTime=((long)t.hour()*3600)+((long)t.minute()*60)+(long)t.second();
nilai = analogRead(hujan); 
// hujan   
Serial.println(nilai);
if (nilai<batas) {
  sedangHujan=true;
  waktuHujan=currentTime+60;
}
else {
  if (waktuHujan<currentTime){
    sedangHujan=false;
    waktuHujan=(long)24*3600+1;
  }
}
if ((currentTime>=time1&&currentTime<time2) || (currentTime>=time3&&currentTime<time4)) {
  // case 3 & 4
  // atau case 7 & 8
  if (sedangHujan){
    if (atapTerbuka) {
      Serial.println("searah jarum jam");
      digitalWrite(IN_1,HIGH);
      digitalWrite(IN_2,LOW);
      delay(680);
      digitalWrite(IN_1,LOW);
      digitalWrite(IN_2,LOW);
      atapTerbuka=false;
    }
    if (!lampuNyala) {
      digitalWrite(lampu,HIGH);
      lampuNyala=true;
    }
  }
  else {
    if (!atapTerbuka) {
      Serial.println("berlawanan jarum jam");
      digitalWrite(IN_1,LOW);
      digitalWrite(IN_2,HIGH);
      delay(680);
      digitalWrite(IN_1,LOW);
      digitalWrite(IN_2,LOW);
      atapTerbuka=true;
    }
    if (lampuNyala) {
      digitalWrite(lampu,LOW);
      lampuNyala=false;
    }
  }
}
else if (currentTime>=time2&&currentTime<time3) {
  // case 5 atau 6
  if (atapTerbuka){
    Serial.println("searah jarum jam");
    digitalWrite(IN_1,HIGH);
    digitalWrite(IN_2,LOW);
    delay(680);
    digitalWrite(IN_1,LOW);
    digitalWrite(IN_2,LOW);
    atapTerbuka=false;
  }
  if (!lampuNyala) {
    digitalWrite(lampu,HIGH);
    lampuNyala=true;
  }
}
else {
  // case 1 atau 2
  if (atapTerbuka){
    Serial.println("searah jarum jam");
    digitalWrite(IN_1,HIGH);
    digitalWrite(IN_2,LOW);
    delay(680);
    digitalWrite(IN_1,LOW);
    digitalWrite(IN_2,LOW);
    atapTerbuka=false;
  }
  if (lampuNyala) {
    digitalWrite(lampu,LOW);
    lampuNyala=false;
  }
}
//currentTime=t.hour()*3600+t.minute()*60+t.second();
    
delay(1000);
}
