#include <LiquidCrystal_I2C.h>
#include <Servo.h>
#include "HX711.h"
LiquidCrystal_I2C lcd(0x27,16,2);
Servo myservo;
const int TRIGPIN = 7;
const int ECHOPIN = 6;
const int LOADCELL_DOUT_PIN = 5;
const int LOADCELL_SCK_PIN = 4;
const int ECHO = 11;
const int TRIG = 10;
const int buzzer = 12;
const int kuning = 13;
const int merah = 9;
const int hijau = 8;
HX711 scale;
void setup() {
myservo.attach(3);
pinMode(TRIGPIN, OUTPUT);
pinMode(ECHOPIN, INPUT);
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
pinMode(merah, OUTPUT);
pinMode(kuning, OUTPUT);
pinMode(hijau, OUTPUT);
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
Serial.begin(115200);
lcd.init();
lcd.backlight();
long calibration_factor = -7050; // Sesuaikan nilai ini
scale.set_scale(calibration_factor); // Set faktor kalibrasi
scale.tare();
}
void loop() {
long distance, duration;
long jarak, waktu;
digitalWrite(TRIGPIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGPIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGPIN, LOW);
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
duration = pulseIn(ECHOPIN, HIGH);
waktu = pulseIn(ECHO, HIGH);
distance = duration* 0.034/2;
jarak = waktu* 0.034/2;
Serial.print("JARAK: ");
Serial.print(distance);
Serial.println(" cm");
if (distance<10){
myservo.write(0);
}
else if (distance<400) {
myservo.write(180);
}
delay(500);
if (jarak<5){
lcd.clear();
lcd.print("PENUH");
tone(12,500,500);
digitalWrite(13, HIGH);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
}
else if (jarak<50){
lcd.print("SETENGAH");
digitalWrite(13, LOW);
digitalWrite(9, HIGH);
digitalWrite(8, LOW);
digitalWrite(buzzer, LOW);
lcd.clear();
}
else if (jarak<100) {
lcd.print("KOSONG");
digitalWrite(13, LOW);
digitalWrite(9, LOW);
digitalWrite(8, HIGH);
digitalWrite(buzzer, LOW);
lcd.clear();
}
}