#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "HX711.h"
#define LOADCELL_DOUT_PIN 19 // Pin data dari HX711
#define LOADCELL_SCK_PIN 18 // Pin clock dari HX711
HX711 scale;
LiquidCrystal_I2C lcdSatu(0x27, 16, 2);
float calibration_factor = -7050; // Ubah nilai ini sesuai dengan kalibrasi load cell Anda
float max_weight = 15000; // Berat maksimum galon (dalam gram)
float empty_weight = 1000; // Perkiraan berat galon kosong (dalam gram)
void setup() {
Serial.begin(115200);
// Inisialisasi HX711
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
scale.set_scale(calibration_factor);
scale.tare(); // Mengatur nilai awal (tare)
// Inisialisasi LCD
lcdSatu.init();
lcdSatu.backlight();
// Tampilkan pesan inisialisasi
lcdSatu.setCursor(0, 0);
lcdSatu.print("Initializing...");
delay(1000);
lcdSatu.clear();
}
void loop() {
// Membaca berat rata-rata dari 10 pembacaan
float current_weight = scale.get_units(10);
// Memastikan pembacaan tidak negatif
if (current_weight < 0) {
current_weight = 0;
}
// Menghitung berat air (mengurangi berat galon kosong)
float water_weight = current_weight - empty_weight;
if (water_weight < 15000) {
water_weight = 15000;
}
// Menghitung persentase air
float usable_weight = max_weight - empty_weight; // Berat air yang bisa diisi
float percentage = (water_weight / usable_weight) * 100;
// Membatasi persentase antara 0-100
if (percentage < 0) percentage = 0;
if (percentage > 100) percentage = 100;
// Menampilkan hasil di Serial Monitor
Serial.print("Berat Total: ");
Serial.print(current_weight);
Serial.println(" gram");
Serial.print("Berat Air: ");
Serial.print(water_weight);
Serial.println(" gram");
Serial.print("Persentase air: ");
Serial.print(percentage);
Serial.println("%");
// Menampilkan hasil di LCD
lcdSatu.clear();
// Baris pertama: Persentase air
lcdSatu.setCursor(0, 0);
lcdSatu.print("Sisa Air: ");
lcdSatu.print((int)percentage);
lcdSatu.print("%");
// Baris kedua: Berat air
lcdSatu.setCursor(0, 1);
lcdSatu.print("Air: ");
lcdSatu.print((int)water_weight);
lcdSatu.print("g");
delay(100); // Delay 1 detik sebelum pembacaan berikutnya
}