#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <Wire.h>
RTC_DS1307 rtc;
DateTime waktu;
char buffer[20],buffer2[8];
const float BETA = 3950;
LiquidCrystal_I2C lcd(0x27,16 ,2);
const int trigger = 8;
const int echo = 9;
const int pupukA = 7;
const int pupukB = 6;
const int r3 = 5; //pengaduk pupuk
const int r4 = 4; //penyalur air nutrisi
unsigned long r3StartTime = 0;
unsigned long r4StartTime = 0;
void setup() {
rtc.begin();
lcd.init();
lcd.backlight();
// lcd.setCursor(0,0);
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
pinMode(pupukA, OUTPUT);
pinMode(pupukB, OUTPUT);
pinMode(r3, OUTPUT);
pinMode(r4, OUTPUT);
Serial.begin(9600);
}
void loop() {
DateTime now=rtc.now();
lcd.setCursor(0,0); lcd.print("DATE: ");
lcd.print(now.year()); lcd.print("/"); lcd.print(now.month()); lcd.print("/"); lcd.print(now.day());
lcd.setCursor(0,1); lcd.print("TIME: ");
lcd.print(now.hour()); lcd.print(":"); lcd.print(now.minute()); lcd.print(":"); lcd.print(now.second());
lcd.print(buffer);
digitalWrite(trigger, LOW);
delayMicroseconds(5);
digitalWrite(trigger, HIGH);
delayMicroseconds(13);
digitalWrite(trigger, LOW);
long duration = pulseIn(echo, HIGH);
long kedalaman = (duration * 0.0343) / 2;
if (kedalaman < 10) {
digitalWrite(pupukA, HIGH);
digitalWrite(pupukB, HIGH);
} else if (kedalaman > 10) {
digitalWrite(pupukB, LOW);
digitalWrite(pupukA, LOW);
}
int r1State = digitalRead(pupukA);
int r2State = digitalRead(pupukB);
if (r1State == HIGH && r2State == HIGH) {
delay(1000);
if (r3StartTime == 1000) {
r3StartTime = millis();
}
if (millis() - r3StartTime >= 0) {
digitalWrite(r3, HIGH);
}
} else {
digitalWrite(r3, LOW);
r3StartTime = 0;
}
int r3State = digitalRead(r3);
if (r3State == LOW) {
if (r4StartTime == 0) {
r4StartTime = millis();
}
if (millis() - r4StartTime >= 4000) {
digitalWrite(r4, LOW);
r4StartTime = 0;
} else {
delay(1000);
digitalWrite(r4, HIGH);
}
} else {
digitalWrite(r4, LOW);
r4StartTime = 0;
}
}