Error Esp 32 con keypad 4x4 y LCD 2x16

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';        
}    
  
                            

From what I see in your picture you have a bunch of antennas connected to it. You need to put it in a metal enclosure and ground it if you can. You are getting EMI probably from fluorescent lights.

://forum.arduino.cc/t/error-esp-32-con-keypad-4x4-y-lcd-2x16/1091440

If want to communicate in spanish language you should report your thread to a moderator and to move it into the spanish sub-forum

best regards Stefan

:warning:
Código corregido

Tu publicación fue ** MOVIDA ** a su ubicación actual ya que es más adecuada.

¿Podría también tomarse unos minutos para Aprenda a usar el foro .

Moderador:
Por favor, lee las Normas del foro
Si posteas en el foro en inglés usa idioma inglés para expresarte.
Si escribes en español debes usar el foro Arduino en español.

No se si entiendes inglés pero lo que te dicen y yo iba a decirte lo mismo es que tienes muchas antenas disponibles para captar interferencia.
Tienes que poner todo en un gabinete metálico (jaula de faraday) y repetir la prueba.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.