#include <Wire.h> //NANO
#include <LiquidCrystal_I2C.h> //LIBRARY LCD
#include "HX711.h" //LIBRARY LOADCELL
const int ldrPin = A0; //CODINGAN LDR
const int irSensorPin = 2; //INFRARED
LiquidCrystal_I2C lcd(0x27, 20, 4); //LCD
HX711 scale; //LOADCELL
float calibration_factor = -400; //Nilai awal perkiraan
float units; //LOADCELL
float ounces; //LOADCELL
void setup() {
pinMode(irSensorPin, INPUT); //INFRARED
Serial.begin(9600); //LCD
Serial.println("HX711 Kalibrasi"); //LOADCELL
Serial.println("Jangan ada benda apapun diatas load cell"); //ini penting
Serial.println("Kemudian letakan benda"); //misalnya batu baterai yang sudah diketahui beratnya
Serial.println("Tekan + atau a untuk meningkatkan faktor kalibrasi");
Serial.println("Tekan - atau z untuk mengurangi faktor kalibrasi");
scale.begin(3, 2);
scale.set_scale();
scale.tare();
long zero_factor = scale.read_average();
Serial.print("Zero factor: ");
Serial.println(zero_factor);
lcd.init();
scale.begin(A0, A1);
}
void loop() {
int irStatus = digitalRead(irSensorPin); //INFRARED
// Tampilkan status sensor IR di Serial Monitor
Serial.print("Status IR: ");
Serial.println(irStatus);
// Tampilkan status sensor IR di LCD 20x4
lcd.setCursor(0, 2);
lcd.print("IR: ");
if (irStatus == HIGH) {
lcd.print("Takada darah");
} else {
lcd.print("Darah Naik");
}
delay(1000); // Tunda 1 detik sebelum membaca ulang //INFRARED
int ldrValue = analogRead(ldrPin); //CODINGAN LDR
Serial.print("Nilai LDR: "); //CODINGAN LDR
Serial.println(ldrValue); //CODINGAN LDR
// Tampilkan nilai LDR di LCD 20x4
lcd.setCursor(0, 1); //CODINGAN LDR
lcd.print("Nilai LDR: "); //CODINGAN LDR
lcd.print(ldrValue); //CODINGAN LDR
delay(1000); // Tunda 1 detik sebelum membaca ulang LDR
scale.set_scale(calibration_factor); //LOADCELL
Serial.print("Pembacaan : "); //LOADCELL
units = scale.get_units(), 10; //LOADCELL
if (units < 0)
{
units = 0.00;
}
ounces = units * 0.035274;
Serial.print(units);
Serial.print(" grams");
Serial.print(" calibration_factor: ");
Serial.print(calibration_factor);
Serial.println();
if(Serial.available())
{
char temp = Serial.read();
if(temp == '+' || temp == 'a')
calibration_factor += 1;
else if(temp == '-' || temp == 'z')
calibration_factor -= 1;
int weight = scale.get_units(10);
lcd.setCursor(0,0);
lcd.print("Weight: " + String(weight) + " G");
if (weight < 1.5) {
lcd.setCursor(0,0);
lcd.print("Cairan infus Habis");
delay(1000);
}
lcd.setCursor(0, 0); //LCD
lcd.print("Berat: "+ String(scale.get_units(10), 1) + " G"); //LCD TO LOADCELL
delay(1000);
}
}