#include <Wire.h>
#include <HX711.h>
#include <RTClib.h>
#include <Servo.h>
#include <LiquidCrystal_I2C.h>
#define DOUT1 32 // Pin DOUT Load Cell 1
#define CLK1 34 // Pin CLK Load Cell 1
#define DOUT2 27 // Pin DOUT Load Cell 2
#define CLK2 26 // Pin CLK Load Cell 2
#define PIN_SERVO 18 // Pin Servo
#define ALAMAT_LCD_I2C 0x27 // Alamat LCD I2C
#define KOLOM_LCD 16 // Jumlah Kolom LCD
#define BARIS_LCD 2 // Jumlah Baris LCD
HX711 sensor1;
HX711 sensor2;
RTC_DS3231 rtc;
Servo servo;
LiquidCrystal_I2C lcd(ALAMAT_LCD_I2C, KOLOM_LCD, BARIS_LCD);
void setup() {
Serial.begin(9600);
// Inisialisasi Load Cells
sensor1.begin(DOUT1, CLK1);
sensor2.begin(DOUT2, CLK2);
// Inisialisasi RTC
rtc.begin();
// Inisialisasi Servo
servo.attach(PIN_SERVO);
// Inisialisasi LCD
lcd.init();
lcd.backlight();
// Set posisi awal servo
servo.write(0);
}
void loop() {
// Baca nilai dari load cell
float berat1 = sensor1.get_units();
float berat2 = sensor2.get_units();
// Periksa kondisi
if (berat1 > 5 && berat2 > 2) {
// Gerakkan servo
servo.write(90); // Atau sudut yang diinginkan
delay(3000); // Jeda selama 3 detik
// Tampilkan nilai load cell pada LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Load Cell 1: ");
lcd.print(berat1);
lcd.print(" kg");
lcd.setCursor(0, 1);
lcd.print("Load Cell 2: ");
lcd.print(berat2);
lcd.print(" kg");
// Penghitung mundur selama 5 menit
DateTime sekarang = rtc.now();
DateTime masa_depan = sekarang + TimeSpan(0, 5, 0, 0); // 5 menit kemudian
while (sekarang < masa_depan) {
sekarang = rtc.now(); // Perbarui waktu sekarang di setiap iterasi
TimeSpan sisa_waktu = masa_depan - sekarang;
lcd.setCursor(0, 1);
lcd.print("Sisa waktu: ");
lcd.print(sisa_waktu.hours());
lcd.print(" jam ");
lcd.print(sisa_waktu.minutes());
lcd.print(" menit ");
lcd.print(sisa_waktu.seconds());
lcd.print(" detik ");
delay(1000); // Perbarui setiap detik
}
// Reset posisi servo
servo.write(0);
// Bersihkan LCD
lcd.clear();
}
}