Buen dia amigos, tengo un problema y es que estoy intentando crear un dispositivo que funcione alrededor de 8 horas cerca a maquinas de confección, el dispositivo consta de un teclado matricial 4x4, un ESP32 y una pantalla lcd 2x16, sucede que a nivel de pruebas me iba full, pero ya cuando lo montamos cerca a las maquinas, empezó a digitar números solos, y pues realmente no se que pueda ser, actualmente los tengo montados sobre las protoboards mas pequeñas que encontre de esta forma:
este es mi codigo, ya le he dado varias vueltas y no encuentro el porque, les agradezco si conocen solucion alguna a este problema
//librerias
//libreria wifi
#include <WiFi.h>
#include <HTTPClient.h>
//---------------------Credenciales de WiFi-----------------------
//---------wifi david-----------
//const char* ssid = "Wifi";
//const char* password = "GTA5";
//libreria pantalla
#include <LiquidCrystal_I2C.h> //DESCARGAR LIBRERÍA:https://github.com/ELECTROALL/Codigos-arduino/blob/master/LiquidCrystal_I2C.zip
#include <Keypad.h> // libreria teclado
//librerias para NFC
#include <SPI.h>
//librerias para pasar info
#include <ArduinoJson.h>
#include <Wire.h>
//objetos
LiquidCrystal_I2C lcd(0x27,16,2); // si no te sale con esta direccion puedes usar (0x3f,16,2) || (0x27,16,2) ||(0x20,16,2)
//configuracion del teclado
#define ROW_NUM 4 // four rows
#define COLUMN_NUM 4 // four columns
char keys[ROW_NUM][COLUMN_NUM] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
// pines de la placa con el teclado
byte pin_rows[ROW_NUM] = {13, 12, 14, 27}; // GIOP13, GIOP12, GIOP14, GIOP27 connect to the row pins
byte pin_column[COLUMN_NUM] = {26, 25, 33, 32}; // GIOP26, GIOP25, GIOP33, GIOP32 connect to the column pins
Keypad customKeypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );
//variables para teclado
int cursorColumn=0;
//variables
String orden; //numero de orden
String cantidad; //contador de prendas
String idusuario="";
int idusuarioentero;
int idmaquina=7;
char enter='z';
String operacion="";
String parte="";
String talla="";
String hora;
String resultado;
String tipo_pausa;
//string de datos para subir
String server = "http://maker.ifttt.com";
String eventName = "Enviodatos";
String IFTTT_Key = "nYWAcKOSvl4gAqAMd2Acsg2wc6I5NLzIrYhIHw";
String IFTTTUrl="https://maker.ifttt.com/trigger/Enviodatos/with/key/nYWAcKOSvl4gAqAMd2Acsg2wc6I5NLzIrYhEsw";
//-----------------------------------------------------
void setup() {
//comunicacion serial
Serial.begin(9600);
Wire.begin(); // rtc
//RFID
SPI.begin(); //Iniciamos el Bus SPI
//conexion wifi
WiFi.begin(ssid, password);
//pantalla
lcd.init();
lcd.backlight();
lcd.clear();
}
void limpia(){
Serial.println(idusuario);
lcd.clear();
lcd.setCursor(0,0);
}
void usuario(){
idusuarioentero=idusuario.toInt();
switch(idusuarioentero){
case 1:
limpia();
lcd.print("Hola Paola");
delay(900);
break;
case 2:
limpia();
lcd.print("Hola Sindy");
delay(900);
break;
case 3:
limpia();
lcd.print("Hola Damaris");
delay(900);
break;
case 4:
limpia();
lcd.print("Hola Liliana");
delay(900);
break;
case 5:
limpia();
lcd.print("Hola Stella");
delay(900);
break;
case 6:
limpia();
lcd.print("Hola Leidy");
delay(900);
break;
case 7:
limpia();
lcd.print("Hola Jorge L");
delay(900);
break;
case 8:
limpia();
lcd.print("Hola Jorge G");
delay(900);
break;
case 9:
limpia();
lcd.print("Hola Gregorio");
delay(900);
break;
case 10:
limpia();
lcd.print("Hola Bairon");
delay(900);
break;
case 11:
limpia();
lcd.print("Hola David");
delay(900);
break;
default:
limpia();
lcd.print("Usuario Invalido");
delay(900);
break;
}
}
void enviodatos(){
resultado=String(idmaquina)+";"+String(idusuario)+";"+orden+";"+";"+operacion+";"+talla+";"+parte+";"+hora+";"+cantidad+";"+tipo_pausa;
String url = server + "/trigger/" + eventName + "/with/key/" + IFTTT_Key + "?value1=" + resultado;
Serial.println(url);
//Start to send data to IFTTT
HTTPClient http;
Serial.print("[HTTP] begin...\n");
http.begin(url); //HTTP
Serial.print("[HTTP] GET...\n");
// start connection and send HTTP header
int httpCode = http.GET();
// httpCode will be negative on error
if(httpCode > 0) {
// HTTP header has been send and Server response header has been handled
Serial.printf("[HTTP] GET... code: %d\n", httpCode);
// file found at server
if(httpCode == HTTP_CODE_OK) {
String payload = http.getString();
Serial.println(payload);
}
} else {
Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("almacenado");
delay(900);
lcd.clear();
}
void loop() {
//bienvenida
lcd.print("Bienvenido");
lcd.setCursor(0,1);
lcd.print("Identifiquese");
delay(1500);
lcd.clear();
idusuario="";
lcd.setCursor(0,0);
lcd.print("ingrese id");
lcd.setCursor(0,1);
//----------menu usuario---------------------------------------------
while(enter!='A'){
char tecla2 =customKeypad.getKey();
if(tecla2){
lcd.print(tecla2);
if(tecla2!='A'&& tecla2!='B'&& tecla2!='C'&& tecla2!='*'&& tecla2!='#'&& tecla2!='D'){
idusuario+=tecla2;
}
else if(tecla2=='A'){
lcd.clear();
usuario();
Serial.println("quedo el usuario ");
Serial.println(idusuario);
enter=tecla2;
}
else if(tecla2=='D'){
lcd.clear();
idusuario="";
lcd.setCursor(0,0);
lcd.print("nuevo usuario");
lcd.setCursor(0,1);
}
}
}
enter='z';
//------------------menu orden----------------------/
if(idusuario!=""&&idusuario.length()<3){
lcd.clear();
orden="";
lcd.setCursor(0,0);
lcd.print("Ingrese Orden");
lcd.setCursor(0,1);
while(enter!='A'){
char tecla2 =customKeypad.getKey();
if(tecla2){
lcd.print(tecla2);
if(tecla2!='A'&& tecla2!='B'&& tecla2!='C'&& tecla2!='*'&& tecla2!='#'&& tecla2!='D'){
orden+=tecla2;
}
else if(tecla2=='A'){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Orden");
lcd.setCursor(0,1);
lcd.print(orden);
Serial.println("quedo la orden ");
Serial.println(orden);
enter=tecla2;
}
//-----seccion de codigo para borrar variables con la tecla D
else if(tecla2=='D'){
lcd.clear();
orden="";
lcd.setCursor(0,0);
lcd.print("nueva orden");
lcd.setCursor(0,1);
}
}
}
}
enter='z';
//----------------------------Menu Operacion---------------------------------------
if(orden.length()>2&&orden.length()<5){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("operacion");
lcd.setCursor(0,1);
while(enter!='A'){
char tecla2 =customKeypad.getKey();
if(tecla2){
if(tecla2!='A'&& tecla2!='B'&& tecla2!='C'&& tecla2!='*'&& tecla2!='#'&& tecla2!='D'){
lcd.print(tecla2);
operacion=tecla2;
}
else if(tecla2=='A'){
Serial.println("quedo la operacion ");
Serial.println(operacion);
enter=tecla2;
}
else if(tecla2=='D'){
lcd.clear();
operacion="";
lcd.setCursor(0,0);
lcd.print("nueva operacion");
lcd.setCursor(0,1);
}
}
}
}
enter='z';
//-----------------Menu talla----------------------------------
if(operacion!=""){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("talla");
lcd.setCursor(0,1);
while(enter!='A'){
char tecla2 =customKeypad.getKey();
if(tecla2){
if(tecla2!='A'&& tecla2!='B'&& tecla2!='C'&& tecla2!='*'&& tecla2!='#'&&tecla2!='D'){
lcd.print(tecla2);
talla+=tecla2;
}
else if(tecla2=='A'){
Serial.println("quedo la talla ");
Serial.println(talla);
enter=tecla2;
}
else if(tecla2=='D'){
lcd.clear();
talla="";
lcd.setCursor(0,0);
lcd.print("nueva talla");
lcd.setCursor(0,1);
}
}
}
}
enter='z';
//-----------------------Menu Cantidad--------------------------------------
if(talla!=""){
hora="inicio";
lcd.clear();
lcd.setCursor(0,0);
lcd.print("hora inicio");
lcd.setCursor(0,1);
lcd.print("actualizada");
enviodatos();
delay(1200);
lcd.clear();
lcd.print("cantidad");
lcd.setCursor(0,1);
while(enter!='A'){
char tecla2 =customKeypad.getKey();
if(tecla2){
lcd.print(tecla2);
if(tecla2!='A'&& tecla2!='B'&& tecla2!='C'&& tecla2!='*'&& tecla2!='#'&&tecla2!='D'){
cantidad+=tecla2;
Serial.println(cantidad);
}
else if(tecla2=='A'){
Serial.println("quedo la cantidad");
Serial.println(cantidad);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("hora fin");
lcd.setCursor(0,1);
lcd.print("subida");
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("almacenado");
delay(1200);
lcd.clear();
//resultado=idusuario+";"+orden+";"+operacion+";"+parte+";"+fechahorainicio+";"+cantidad+";"+horafin+";"+resultado;
//Serial.println(resultado);
//enviar datos a google sheets
hora="fin";
enviodatos();
//-------------------------Limpieza de variables para ESP32 para uso de JSON
idusuario="";
orden="";
operacion="";
parte="";
cantidad="";
talla="";
resultado="";
hora="";
tipo_pausa="";
enter=tecla2;
}
else if(tecla2=='D'){
lcd.clear();
cantidad="";
lcd.setCursor(0,0);
lcd.print("nueva cantidad");
lcd.setCursor(0,1);
}
//------menu pausa--------------------
else if(tecla2=='*'){
hora="pausa";
enviodatos();
Serial.println("hora pausada");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ingrese tipo ");
lcd.setCursor(0,1);
lcd.print("de pausa: ");
while(enter!='A'){
char tecla2 =customKeypad.getKey();
if(tecla2){
lcd.print(tecla2);
if(tecla2!='A'&& tecla2!='B'&& tecla2!='C'&& tecla2!='*'&& tecla2!='#'&&tecla2!='D'){
tipo_pausa+=tecla2;
}
else if(tecla2=='A'){
Serial.println("quedo el tipo de pausa");
Serial.println(tipo_pausa);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("tipo de pausa");
lcd.setCursor(0,1);
lcd.print("subida");
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("almacenado");
delay(1200);
lcd.clear();
enter=tecla2;
}
enter='z';
//-------menu
if(tipo_pausa!=""){
lcd.clear();
hora="reanudacion";
enviodatos();
lcd.setCursor(0,0);
lcd.print("ingrese cantidad");
cantidad="";
lcd.setCursor(0,1);
while(enter!='A'){
char tecla2 =customKeypad.getKey();
if(tecla2){
if(tecla2!='A'&& tecla2!='B'&& tecla2!='C'&& tecla2!='*'&& tecla2!='#'&&tecla2!='D'){
lcd.print(tecla2);
cantidad+=tecla2;
}
else if(tecla2=='A'){
hora="fin";
Serial.println("quedo la cantidad ");
Serial.println(cantidad);
enviodatos();
idusuario="";
orden="";
operacion="";
parte="";
cantidad="";
talla="";
resultado="";
hora="";
tipo_pausa="";
delay(1000);
enter=tecla2;
}
else if(tecla2=='D'){
lcd.clear();
cantidad="";
lcd.setCursor(0,0);
lcd.print("nueva cantidad");
lcd.setCursor(0,1);
}
}
}
}
}
}
}
}
}
}
enter='z';
}