#include <HX711_ADC.h>
#include <LiquidCrystal_I2C.h>
//PIN Untuk Loadcell HX711
const int pinData = 4;
const int pinSCK = 5;
float nilaiLoadCell;
float beratDalamGram;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Ganti alamat ini jika perlu
//Inisiasi nama HX711 ke LoadCell
HX711_ADC LoadCell(pinData, pinSCK);
float calibrationValue;
unsigned long timeStore = 0;
unsigned long waktuStabil = 3000; // Delay waktu stabil loadcell
boolean _tare = true; // set this to false if you don't want tare to be performed in the next step
void setup() {
// Serial.begin(57600);
Serial.begin(115200);
nilaiLoadCell = 0;
beratDalamGram = 0;
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Aktifkan backlight
lcd.clear(); // Bersihkan layar LCD
lcd.print("Kosongkan Muatan");
lcd.clear();
delay(5000);
LoadCell.begin();
//LoadCell.setReverseOutput(); //uncomment ini jika ingin kalkulasi minus dijadikan plus
calibrationValue = 420.00; // Nilai kalibrasi yang sudah tercatat (ganti ini jika nilai yang sudah tercatat beda)
LoadCell.start(waktuStabil, _tare);
if (LoadCell.getTareTimeoutFlag()) {
Serial.println("Timeout, ada masalah pada wiring atau loadcell");
while (1)
;
} else {
LoadCell.setCalFactor(calibrationValue); // set calibration value (float)
Serial.println("Startup is complete");
}
}
void loop() {
static boolean newDataReady = false;
const int serialPrintInterval = 300; //nilai delay untuk proses pembacaan loadcell
// check data apakah data siap dikonversi
if (LoadCell.update()) {
newDataReady = true;
}
// menggunakan fungsi millis untuk delay
if (newDataReady) {
if (millis() > timeStore + serialPrintInterval) {
nilaiLoadCell = LoadCell.getData();
beratDalamGram = nilaiLoadCell * 1000;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Berat: ");
lcd.setCursor(0, 1);
lcd.print(beratDalamGram);
lcd.print(" gram");
Serial.print("Berat= ");
Serial.print(nilaiLoadCell * 1000);
Serial.println(" gram");
newDataReady = 0;
timeStore = millis();
}
}
}