#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <HX711.h>
const byte numRows = 4; // Jumlah baris keypad
const byte numCols = 4; // Jumlah kolom keypad
char keymap[numRows][numCols] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'.', '0', '#', 'D'} // Ubah '*' menjadi '.'
};
byte rowPins[numRows] = {22,23,24,25}; // Hubungkan baris keypad ke pin 9, 8, 7, 6
byte colPins[numCols] = {26,27,28,29}; // Hubungkan kolom keypad ke pin 5, 4, 3, 2
Keypad keypad = Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat LCD I2C: 0x27, 16 karakter, 2 baris
String inputNumber = ""; // Variabel untuk menyimpan angka yang dimasukkan
// Inisialisasi pin data dan clock HX711 untuk masing-masing load cell
const int loadCell1_data_pin = 2;
const int loadCell1_clock_pin = 3;
const int loadCell2_data_pin = 4;
const int loadCell2_clock_pin = 5;
const int loadCell3_data_pin = 6;
const int loadCell3_clock_pin = 7;
const int loadCell4_data_pin = 11;
const int loadCell4_clock_pin = 12;
// Objek HX711 untuk masing-masing load cell
HX711 loadCell1;
HX711 loadCell2;
HX711 loadCell3;
HX711 loadCell4;
// Faktor kalibrasi untuk masing-masing load cell
float loadCell1_calibration_factor = 420;
float loadCell2_calibration_factor = 420;
float loadCell3_calibration_factor = 420;
float loadCell4_calibration_factor = 420;
// Toleransi berat
float toleransi = 0.05;
// Standar Berat Objek
float enteredNumber = inputNumber.toFloat(); // Ubah ke tipe float
//LED dan buzzer
const int buzzerPin = 8; // pin buzzer dihubungkan ke pin digital 8 pada Arduino
const int redLedPin = 9; // Pin LED merah dihubungkan ke pin digital 9 pada Arduino
const int greenLedPin = 10; //Pin LED hijau dihubungkan ke pin digital 10 pada Arduino
void setup() {
Serial.begin(9600);
// Menginisialisasi load cell
loadCell1.begin(loadCell1_data_pin, loadCell1_clock_pin);
loadCell2.begin(loadCell2_data_pin, loadCell2_clock_pin);
loadCell3.begin(loadCell3_data_pin, loadCell3_clock_pin);
loadCell4.begin(loadCell4_data_pin, loadCell4_clock_pin);
// Set faktor kalibrasi
loadCell1.set_scale(loadCell1_calibration_factor);
loadCell2.set_scale(loadCell2_calibration_factor);
loadCell3.set_scale(loadCell3_calibration_factor);
loadCell4.set_scale(loadCell3_calibration_factor);
// Set tara
loadCell1.tare();
loadCell2.tare();
loadCell3.tare();
loadCell4.tare();
//setup awal lcd ketika running
lcd.begin(16, 2);
lcd.init();
lcd.backlight();
lcd.setCursor(1, 0);
lcd.print("Pengujian Berat");
lcd.setCursor(0, 1);
lcd.println("Kendaraan Roda 4");
delay(2000);
lcd.clear();
}
void loop() {
lcd.setCursor(0, 0);
lcd.print("Standar Berat:");
char key = keypad.getKey();
if (key) {
if (key == 'B') {
// Ketika tombol 'B' (Enter) ditekan, proses angka yang dimasukkan
if (inputNumber.length() > 0) {
float enteredNumber = inputNumber.toFloat(); // Ubah ke tipe float
lcd.clear();
lcd.print("Standar : ");
lcd.print(enteredNumber, 2); // Tampilkan angka dengan 2 desimal
Serial.print("Standar Berat yang dimasukkan: ");
Serial.println(enteredNumber, 2);
}
inputNumber = ""; // Reset input setelah angka diproses
} else {
// Ketika tombol angka ditekan, tambahkan angka ke variabel inputNumber
if (isdigit(key) || key == '.') {
inputNumber += key;
lcd.setCursor(0, 1);
lcd.print(inputNumber);
}
}
}
/* // Membaca nilai rata-rata dari masing-masing load cell
float nilai_loadCell1 = loadCell1.get_units(10);
float nilai_loadCell2 = loadCell2.get_units(10);
float nilai_loadCell3 = loadCell3.get_units(10);
float nilai_loadCell4 = loadCell4.get_units(10);
// Menghitung rata-rata beban
float average_load = ((nilai_loadCell1 + nilai_loadCell2+ nilai_loadCell3+ nilai_loadCell4) / 4);
// Menampilkan nilai rata-rata beban di Serial Monitor
Serial.print("Rata-rata beban: ");
Serial.println(average_load);
Serial.println(" kg");
// Tampilkan berat pada LCD dalam kg
lcd.setCursor(0, 0);
lcd.print("Berat: ");
lcd.print(average_load);
lcd.print(" kg");
delay(5000);
if (average_load < enteredNumber - toleransi){
digitalWrite(buzzerPin, HIGH);
digitalWrite(redLedPin, HIGH);
digitalWrite(greenLedPin, LOW);
lcd.setCursor(0, 3);
lcd.print("Berat Kurang");
delay(5000);
lcd.clear();
} else if (average_load > enteredNumber + toleransi){
digitalWrite(buzzerPin, HIGH);
digitalWrite(redLedPin, HIGH);
digitalWrite(greenLedPin, LOW);
lcd.setCursor(0, 3);
lcd.print("Berat Berlebih");
delay(5000);
lcd.clear();
} else {
digitalWrite(buzzerPin, LOW);
digitalWrite(redLedPin, LOW);
digitalWrite(greenLedPin, HIGH);
lcd.setCursor(0, 3);
lcd.print("Berat Sesuai");
delay(5000);
lcd.clear();
} */
if (key == 'D') {
// Perform tare operation
loadCell1.tare();
loadCell2.tare();
loadCell3.tare();
loadCell4.tare();
// Display tare message on the LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tare Berhasil!");
delay(2000);
lcd.clear();
}
}
//}