//Incluye las librerías
#include "HX711.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
HX711 balanza;
const int zero = 25;
int DT = 33;
int CLK = 32;
int peso_calibracion = 1000; // Es el peso referencial a poner, en mi caso mi celular pesa 185g (SAMSUMG A20)
long escala;
int state_zero = 0;
int last_state_zero = 0;
//Función calibración
void calibration() { // despues de hacer la calibracion puedes borrar toda la funcion "void calibration()"
boolean conf = true;
long adc_lecture;
// restamos el peso de la base de la balaza
lcd.setCursor(0, 0);
lcd.print("Calibrando base");
lcd.setCursor(4, 1);
lcd.print("Balanza");
delay(3000);
balanza.read();
balanza.set_scale(); //La escala por defecto es 1
balanza.tare(20); //El peso actual es considerado zero.
lcd.clear();
//Iniciando calibración
while (conf == true) {
lcd.setCursor(1, 0);
lcd.print("Peso referencial:");
lcd.setCursor(1, 1);
lcd.print(peso_calibracion);
lcd.print(" g ");
delay(3000);
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("Ponga el Peso");
lcd.setCursor(1, 1);
lcd.print("Referencial");
delay(3000);
//Lee el valor del HX711
adc_lecture = balanza.get_value(100);
//Calcula la escala con el valor leido dividiendo el peso conocido
escala = adc_lecture / peso_calibracion;
//Guarda la escala en la EEPROM
EEPROM.put( 0, escala );
delay(100);
lcd.setCursor(1, 0);
lcd.print("Retire el Peso");
lcd.setCursor(1, 1);
lcd.print("referencial");
delay(3000);
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("READY!!....");
delay(3000);
lcd.clear();
conf = false; //para salir de while
lcd.clear();
}
}
void setup() {
balanza.begin(DT, CLK);//asigana los pines para el recibir el trama del pulsos que viene del modulo
pinMode(zero, INPUT);//declaramos el pin2 como entrada del pulsador
pinMode(13,OUTPUT);
pinMode(19, OUTPUT);
lcd.init(); // Inicializamos el lcd
lcd.backlight(); // encendemos la luz de fondo del lcd
EEPROM.get( 0, escala );//Lee el valor de la escala en la EEPROM
if (digitalRead(zero) == 1) { //esta accion solo sirve la primera vez para calibrar la balanza, es decir se presionar ni bien se enciende el sistema
calibration();
}
balanza.set_scale(escala); // Establecemos la escala
balanza.tare(20); //El peso actual de la base es considerado zero.
}
void loop() {
int state_zero = digitalRead(zero);
float peso;
peso = balanza.get_units(10); //Mide el peso de la balanza
if (peso <= 100){
digitalWrite(19, HIGH);
}
else{
digitalWrite(19, LOW);
}
//Muestra el peso
lcd.setCursor(1, 0);
lcd.print("Peso: ");
lcd.print(peso, 0);
lcd.println(" g ");
delay(5);
//Botón de zero, esto sirve para restar el peso de un recipiente
if ( state_zero != last_state_zero) {
if (state_zero == LOW) {
balanza.tare(10); //El peso actual es considerado zero.
}
}
last_state_zero = state_zero;
if (peso>=500)digitalWrite(13,1);
else if(peso<=500)digitalWrite(13,0);
}