#include <HX711.h>
#include <LiquidCrystal_I2C.h>
// Pin HX711
const int pinDOUT = 2;
const int pinSCK = 3;
HX711 scale;
// Pin LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Pin Tombol
int btn = 5;
// Faktor Kalibrasi (Tetap gunakan nilai kalibrasi Kg Anda, nanti dikonversi di loop)
float calibration_factor = 4.2;
void setup() {
Serial.begin(9600);
scale.begin(pinDOUT, pinSCK);
scale.set_scale(calibration_factor);
scale.tare();
lcd.init();
lcd.backlight();
pinMode(btn, INPUT_PULLUP);
lcd.setCursor(3, 0);
lcd.print("TIMBANGAN");
lcd.setCursor(4, 1);
lcd.print("UNIT: GRAM");
delay(2000);
lcd.clear();
}
void loop() {
// --- LOGIKA TOMBOL TARE ---
if (digitalRead(btn) == LOW) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Resetting...");
scale.tare();
delay(500);
lcd.clear();
}
// --- PEMBACAAN SENSOR ---
if (scale.is_ready()) {
// Ambil data dalam Kg lalu dikali 1000 agar jadi Gram
float beratGram = scale.get_units(5)*10;
// Filter noise: Jika berat sangat kecil, anggap 0
if (beratGram > -0.5 && beratGram < 0.5) beratGram = 0.0;
// Serial Monitor
Serial.print("Berat: ");
Serial.print(beratGram, 0); // 1 angka di belakang koma untuk gram
Serial.println(" g");
// Tampilan LCD
lcd.setCursor(0, 0);
lcd.print("Berat Beban:");
lcd.setCursor(0, 1);
lcd.print(beratGram, 0);
lcd.print(" gram "); // Spasi untuk membersihkan sisa angka
}
delay(100);
}