#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
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
cell1:VCC
cell1:DT
cell1:SCK
cell1:GND
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
led1:A
led1:C
led2:A
led2:C
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
temp1:GND
temp1:DQ
temp1:VCC
r1:1
r1:2
r2:1
r2:2
r3:1
r3:2