#include <HX711.h> // Library untuk Load Cell dan HX711
#include <Wire.h> // Library untuk komunikasi I2C
#include <LiquidCrystal_I2C.h> // Library untuk LCD I2C
// Pin koneksi HX711
#define DT_PIN 3 // Pin data HX711
#define SCK_PIN 4 // Pin clock HX711
// Pin push button tara
#define TARA_BUTTON_PIN 2 // Pin push button
// Inisialisasi Load Cell dan LCD
HX711 scale;
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Variabel
float calibration_factor = -7050; // Faktor kalibrasi, sesuaikan nilainya sesuai Load Cell
long tara_value = 0; // Nilai tara
bool taraPressed = false; // Status apakah tombol tara ditekan
void setup() {
// Inisialisasi LCD
lcd.begin(16, 2);
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Alat Ukur");
lcd.print("Massa Jenis BBM Pertalite");
// Inisialisasi sensor Load Cell (HX711)
scale.begin(DT_PIN, SCK_PIN);
scale.set_scale(calibration_factor); // Set faktor kalibrasi
scale.tare(); // NOL-kan skala
// Inisialisasi push button dengan INPUT_PULLUP
pinMode(TARA_BUTTON_PIN, INPUT_PULLUP);
// Tampilkan pesan awal
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Siap menimbang");
}
void loop() {
// Cek apakah tombol tara ditekan
if (digitalRead(TARA_BUTTON_PIN) == LOW && !taraPressed) {
tara_value = scale.get_units(10); // Ambil nilai tara saat tombol ditekan
taraPressed = true; // Hindari pengulangan baca selama tombol ditekan
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tara disetel!");
delay(1000); // Delay untuk menunggu tampilan
lcd.clear();
} else if (digitalRead(TARA_BUTTON_PIN) == HIGH) {
taraPressed = false; // Reset status tombol saat dilepas
}
// Baca nilai berat dan konversi ke gram
float weight = (scale.get_units(10) - tara_value) * 1000; // Kalibrasi hasil ke gram
MJ = weight/1000;
// Tampilkan berat di LCD
lcd.setCursor(0, 0);
lcd.print("Berat: ");
lcd.print(weight, 2); // Tampilkan nilai berat dalam gram dengan 2 digit desimal
lcd.print(" g ");
lcd.setCursor(0, 1);
lcd.print("MJ: ");
lcd.print(MJ, 5); // Tampilkan nilai berat dalam gram dengan 2 digit desimal
lcd.print(" g/ml ");
delay(500); // Update tampilan setiap 500 ms
}