#include <Arduino.h>
#include "HX711.h"
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Keypad.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
// HX711 circuit wiring
byte Data = A2;
byte PinesSCK = A1;
#define DEBUG_HX711
#define CALIBRACION 94969.00 // LA CALIBRACION SE SACA DE OTRO PROGRAMA DE HX711 CON UN PESO CONOCIDO 94812.00
HX711 bascula;
float peso =0;
/////////////////////telclado//////////////
const byte Filas = 4;
const byte Columnas= 4;
byte PinesFilas[] = {9,8,7,6}; //pines filas
byte PinesColumnas[] = {5,4,3,2}; // pines columnas
char pulsacion;
String PIN_Tecleado = ""; // teclas digitadas
float pesoMinEstablecido = 0.0; // cadena de datos digitados a travez del teclado. Cero por defecto
float pesoMaxEstablecido = 1.0; // Uno por defecto
boolean enMaximo = false; // Indica si se está determinando peso mínimo o máximo.
boolean establecido = false; // Indica si ya se definieron los límites.
boolean puntoEscrito = false; // Indica si ya se ha escrito el punto decimal.
boolean limitesMostrados = false; // Esto evita que, repetidamente, se escriba al LCD los limites ya definidos.
float numero = 0; // datos de peso del puerto serie
const byte ledMin = 12; // LED del peso mínimo
const byte ledMax = 13; // LED del peso máximo
char cadena[17];
char Teclas [Filas][Columnas] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'.', '0', '#', 'D'}
};
Keypad Teclado1 = Keypad(makeKeymap(Teclas), PinesFilas, PinesColumnas, Filas, Columnas);
void setup() {
#ifdef DEBUG_HX711
#endif
// Iniciar sensor
bascula.begin(Data, PinesSCK);
// Aplicar la calibración
bascula.set_scale(420);
// Iniciar la tara
// No tiene que haber nada sobre la balanza
bascula.tare();
Serial.begin(9600);
delay(100);
lcd.begin(16,2);// Iniciamos el lcd
lcd.backlight(); // Encendemos el back light
lcd.setCursor(0, 0);
lcd.print(" pon peso corte");
pinMode(ledMin, OUTPUT);
pinMode(ledMax, OUTPUT);
//pinMode(boton, INPUT);
}
void loop(){
pulsacion = Teclado1.getKey();
//#ifdef DEBUG_HX711
// me tilda todo
// float peso = bascula.get_units(8); // cantidad de veces que pesa (), digitos que se muestran 3. antes tenia en 0 la cantidad de pesadas
//#endif
switch (pulsacion) {
case '.': // Punto decimal
if (puntoEscrito) { // No hace nada si ya se había escrito un punto previamente
break;
} else {
puntoEscrito = true;
}
case '0' ... '9': // o dígitos,
if (!establecido) { // No hace nada si ya se habían establecido los dos límites
delay(30);
//digitalWrite( pinled, LOW); //Si se presiona algun numero durante el arranque se detiene la balanza
// lcd.clear();
PIN_Tecleado += pulsacion; // los agregamos a la cadena
// lcd.setCursor(2, 0);
// lcd.print("DIGITAR PESO");
lcd.setCursor(1, 1);
lcd.print(PIN_Tecleado );
}
break;
case 'B': // Lo tomaremos como enter para guardar el dato
if (!establecido) { // No hace nada si ya se habían establecido los dos límites
delay(30);
lcd.clear();
PIN_Tecleado.toCharArray( cadena, 17);
if (!enMaximo) {
pesoMinEstablecido = atof (cadena);
//Serial.println(pesoMinEstablecido);
} else {
pesoMaxEstablecido = atof (cadena);
//Serial.println(pesoMaxEstablecido);
}
lcd.setCursor(0, 0);
lcd.print("PESO : ");
lcd.setCursor(7, 0);
lcd.print(bascula.get_units(10),2);
lcd.print("Kg");
if (enMaximo) {
// lcd.setCursor(0, 1);
// lcd.print( "PRESIONAR -A-");
establecido = true;
puntoEscrito = true;
} else {
puntoEscrito = false;
lcd.clear();
lcd.setCursor(2, 0);
lcd.print(" PESO MAX");
enMaximo = true;
}
}
PIN_Tecleado = ""; // Tiene sentido vaciar este "búfer" después de establecer un peso.
break;
case 'C': // lo tomaremos como borrar todo
delay(30);
lcd.clear();
// Volver todo a sus valores iniciales
pesoMinEstablecido = 0.0;
pesoMaxEstablecido = 1.0;
enMaximo = false;
establecido = false;
puntoEscrito = false;
limitesMostrados = false;
PIN_Tecleado = "";
lcd.setCursor(2, 0);
lcd.print("PESO MIN");
break;
}
}