#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
}
$abcdeabcde151015202530fghijfghij