#include <LiquidCrystal.h>
#include "HX711_ADC.h"
// Pin assignments
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
const int piezo = 6;
const int nyala = 10;
const int mati = 9;
const int taree = 8;
const int hx711_dout = A1;
const int hx711_sck = A2;
const int trig=13;
const int echo=7;
int maksjarak=200;
int in = 0;
bool deviceOn = false;
bool deteksiitem= false;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
HX711_ADC LoadCell(hx711_dout, hx711_sck);
NewPing sonar(trig, echo, maksjarak);
void setup() {
pinMode(piezo, OUTPUT);
pinMode(nyala, INPUT_PULLUP);
pinMode(mati, INPUT_PULLUP);
pinMode(taree, INPUT_PULLUP);
lcd.begin(16, 2);
LoadCell.begin();
LoadCell.start(1000);
LoadCell.setCalFactor(0.42);
digitalWrite(piezo,LOW);
}
void loop() {
unsigned int jarak = sonar.ping_cm();
if (digitalRead(taree) == LOW) {
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("Kalibrasi...");
delay(1000);
LoadCell.start(1000);
lcd.clear();
} else {
if (jarak > 0 && jarak < 20 && !deteksiitem) {
deteksiitem = true;
in++;
tone(piezo, 1000, 200);
}
}
// Jika jarak lebih besar dari threshold dan item sudah terdeteksi sebelumnya
if (jarak >= 10 && deteksiitem) {
deteksiitem = false;
}
delay(100);
if (digitalRead(nyala) == LOW) {
deviceOn = true;
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("Mesin Nyala");
delay(2000);
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("Kelompok");
lcd.setCursor(7, 1);
lcd.print("C3");
delay(2000);
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("Hitung Jumlah");
lcd.setCursor(0, 1);
lcd.print("dan berat Baglog");
delay(2000);
lcd.clear();
in = 0;
}
if (digitalRead(mati) == LOW) {
deviceOn = false;
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("Mesin Mati");
delay(1000);
lcd.clear();
digitalWrite(piezo,LOW);
in = 0;
return;
}
if (!deviceOn) {
return;
}
if (in >= 3) {
deviceOn = false;
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("Maks 3 Unit");
lcd.setCursor(3, 1);
lcd.print("Mesin Mati");
delay(2000);
lcd.clear();
in = 0;
return;
}
LoadCell.update();
float i = LoadCell.getData();
lcd.setCursor(1, 0);
lcd.print("Jumlah: ");
lcd.setCursor(9, 0);
lcd.print(in);
lcd.print(" Unit ");
lcd.setCursor(1, 1);
lcd.print("Berat : ");
lcd.setCursor(9, 1);
lcd.print(i, 0);
lcd.print(" Gram ");
}