#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <HX711.h>
#include <Keypad.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define DOUT 12
#define CLK 13
#define BUZZER_PIN 32 // Diganti ke pin GPIO 32
#define LED_PIN 25 // Diganti ke pin GPIO 25
#define LED2_PIN 26 // Diganti ke pin GPIO 26
HX711 scale;
const byte ROWS = 4; // jumlah baris pada keypad
const byte COLS = 4; // jumlah kolom pada keypad
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {22, 23, 19, 18}; // konfigurasi pin baris keypad
byte colPins[COLS] = {16, 17, 34, 35}; // konfigurasi pin kolom keypad
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
int targetWeight = 0; // Variabel untuk menyimpan nilai input awal dari keypad
void setup() {
Serial.begin(9600);
scale.begin(DOUT, CLK);
scale.set_scale();
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(LED2_PIN, OUTPUT);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Berat: ");
lcd.setCursor(0, 1);
lcd.print("Input Awal: ");
}
void loop() {
char key = keypad.getKey(); // membaca tombol yang ditekan
if (key != NO_KEY) { // jika tombol ditekan
if (key >= '0' && key <= '9') { // jika tombol angka ditekan
targetWeight = targetWeight * 10 + (key - '0'); // membentuk nilai input awal dari keypad
lcd.setCursor(12, 1);
lcd.print(targetWeight); // menampilkan nilai input awal pada LCD
} else if (key == '#') { // jika tombol '#' ditekan, mulai pembacaan berat load cell
float berat = scale.get_units(10) / 420.00; // baca nilai berat
lcd.setCursor(7, 0);
lcd.print(berat, 2); // tampilkan nilai berat
if (berat == targetWeight) { // jika berat sesuai dengan input awal
digitalWrite(BUZZER_PIN, HIGH); // aktifkan buzzer
delay(1000); // tahan buzzer selama 1 detik
digitalWrite(BUZZER_PIN, LOW); // matikan buzzer
}
}
}
delay(100); // delay untuk menghindari bouncing pada keypad
}