#include "Servo.h"
#include "RTClib.h"
RTC_DS1307 rtc;
char daysOfTheWeek[7][12] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jum'at", "Sabtu"};
unsigned long previousMillis = 0;
const long disp_interval = 300; //untuk simulasi wokwi, untuk hardware atur di 1 second
static const int servoPin = 13;
const int btnPin = 4; // the number of the pushbutton pin
const int ledPin = 12; // the number of the LED pin
int btnStatus = 0;
Servo servo1;
void setup() {
Serial.begin(115200);
Serial.println("Alat Pakan Ikan by Arducoding");
servo1.attach(servoPin);
servo1.write(0); //posisi awal 0
pinMode(btnPin, INPUT);
// initialize the LED pin as an output
pinMode(ledPin, OUTPUT);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
while (1) delay(10);
}
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running, let's set the time!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
delay(1000);
}
void loop() {
Time_display();
btnStatus = digitalRead(btnPin);
if (btnStatus == HIGH) {
kontrol_katup(2,500,45);
} else {
// turn LED off
digitalWrite(ledPin, LOW);
}
}
void Time_display(){
DateTime now = rtc.now();
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= disp_interval) {
previousMillis = currentMillis;
//display date-time
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(" (");
Serial.print(now.year(), DEC); Serial.print('/');
Serial.print(now.month(), DEC); Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print("), ");
Serial.print(now.hour(), DEC); Serial.print(':');
Serial.print(now.minute(), DEC); Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
//pengaturan alarm pakan
//alarm 12:5:0
if(now.hour() == 12 && now.minute()== 7 && now.second()==20){
kontrol_katup(4,1500,30); //buka-tutup 4 kali
}
//alarm dengan spesifik tanggal
// 3 maret 2024 pukul 12:20:0
if (now.year() == 2024 && now.month() == 3 && now.day() == 2 ){
if(now.hour() == 12 && now.minute()== 20 && now.second()==0){
kontrol_katup(3,1500,30); //buka-tutup 3 kali
}
}
//alarm dengan spesifik hari
//misal alarm tiap hari sabtu, pukul 15:37:0
String now_hari = daysOfTheWeek[now.dayOfTheWeek()];
if (now_hari == "Sabtu"){
if(now.hour() == 15 && now.minute()== 37 && now.second()==0){
kontrol_katup(4,1500,30); //buka-tutup 4 kali
}
}
//kasih pakan ikan tiap pagi 7:0:0
if(now.hour() == 15 && now.minute()== 45 && now.second()==0){
kontrol_katup(4,1500,30); //buka-tutup 4 kali
}
//kasih pakan ikan tiap sore 17:0:0
if(now.hour() == 17 && now.minute()== 0 && now.second()==0){
kontrol_katup(5,1000,30); //buka-tutup 3 kali satu detik
}
}
}
void kontrol_katup(int jumlahBuka, int jedawaktu, int sudutServo){
Serial.println("Kasih Makan .....");
// turn LED on
digitalWrite(ledPin, HIGH);
for (int i = 1; i <= jumlahBuka; i++) {
servo1.write(sudutServo);
delay(jedawaktu); //jeda buka - nutup
servo1.write(0);
delay(jedawaktu);
}
}Loading
esp32-devkit-v1
esp32-devkit-v1