Problema con teclado 4x4 matricial

Buenas... tengo un código que me va poniendo números en la pantalla LCD... el 1º,2º y 3º número que pongo me salen a la perfección... pero el 4º siempre me sale un cuadradito, y restándole -48 para que sea el caracter en decimal, me sale -48 en vez del número que presiono... lo raro es que los tres primeros funcionan bien... el código es este:

int num1;
int num2;
int num3;
int num4;
int s;
int t;
int h;
int i;

void modificarhorasriego(){
    
  lcd.clear();
  while (y<1){
  Serial.println(" Dentro de riegos ");
  lcd.setCursor(0,0);
  lcd.write(" Modificar Horarios");
  lcd.setCursor(0,1);
  lcd.write("1er horario:");

  
  while (s<1){
    char key1 = keypad.getKey();
    Serial.println("Dentro del primer while");
    if (key1 != NO_KEY && (key1=='1'||key1=='2'||key1=='3'||key1=='4'||key1=='5'||key1=='6'||key1=='7'||key1=='8'||key1=='9'||key1=='0')){
    Serial.println("Dentro del primer if");
       num1 =  key1-48;
       lcd.setCursor(12,1);
       lcd.print(num1);
       Serial.println(num1);
       Serial.println(key1);
        
        while(t<1){  
          char key2= keypad.getKey(); 
          Serial.println("Dentro del segundo while");     
          if (key2 != NO_KEY && (key2=='1'||key2=='2'||key2=='3'||key2=='4'||key2=='5'||key2=='6'||key2=='7'||key2=='8'||key2=='9'||key2=='0')){
            Serial.println("Dentro del segundo if");
             num2 =  key2-48;
             lcd.setCursor(13,1);
             lcd.print(num2);
             lcd.setCursor(14,1);
             lcd.print(":");
             Serial.println(num2);
             Serial.println(key2);

           while(h<1){  
             char key3= keypad.getKey(); 
             Serial.println("Dentro del tercer while");     
             if (key3 != NO_KEY && (key3=='1'||key3=='2'||key3=='3'||key3=='4'||key3=='5'||key3=='6'||key3=='7'||key3=='8'||key3=='9'||key3=='0')){
                Serial.println("Dentro del tercer if");
                num3 =  key3-48;
                lcd.setCursor(15,1);
                lcd.print(num3);
                Serial.println(num3);
                Serial.println(key3);    
        
              while(i<1){  
                char key4= keypad.getKey(); 
                Serial.println("Dentro del cuarto while");     
                if (key4 != NO_KEY && (key4='1'||key4=='2'||key4=='3'||key4=='4'||key4=='5'||key4=='6'||key4=='7'||key4=='8'||key4=='9'||key4=='0')){
                    Serial.println("Dentro del cuarto if");
                    num4 =  key4-48;
                    lcd.setCursor(16,1);
                    lcd.print(num4);
                    Serial.println(num4);
                    Serial.println(key4);
                    lcd.setCursor(17,1);
                    lcd.print(":00");
             }
            }             
           }
         }                      
       }
      }  
    }
  }
 }
}

Los tres primeros van bien pero en el serial monitor cuando pulso por cuarta vez el número la mostrar la variable num4 me sale -47 y al mostrar la variable key4 me sale █

¿¿cómo es posible que teniendo el mismo código para los 4 números... los tres primeros me sale todo a la perfección pero en el cuarto me sale █???

Captura.JPG

GRACIAS!!!

Captura.JPG

Que es lo que quieres hacer, un menú?
El camino que llevas no es el apropiado.

Acabo de ver una librería porque alguien me pidió lo mismo.
Esa librería se llama LCDMenuLib .

La librerá permite trabajar con todo tipo de LCDs y todo tipo de teclados de ingreso
En tu caso puedes usar el KEYPAD 4x4

Hola, gracias surbyte, ya he probado con librerías y me resultan un poco confusas, el menú ya le tengo hecho y funcionando... Solo me falta saber porqué puedo escribe el primer, segundo y tercer dígito de manera correcta y al introducir el cuarto me muestra un cuadradito en vez del número que he pulsado

Gracias

En 5 minutos he configurado todo tu caso.
Dime como es el listado de librerias y te lo armo y d epaso lo ejercito.

Tengo tu teclado 4x4, el LCD que creo es 20x4.
Debo mirar el otro hilo porque acá no esta completa la idea.

Hola surbyte!! el LCD si es 20x04, y el código completo es el siguiente "sé que habrá mil maneras de hacerlo mucho mejor, pero voy aprendiendo poco a poco, ahora sólo lo que necesito es que la función modificarhorasriego() me permita introducir el cuarto dígito... hasta ahora me permite poner tres y en el cuarto me sale un cuadradito en vez del dígito pulsado con el teclado 4x4" he intenado poner el código pero sobrepasa los 9000 caracteres y no me deja, por lo que dejo el fichero adjunto

Gracias

probando_cosas_3.ino (18.8 KB)

Alguna ayuda??? sigo sin saber porqué cuando pulso por cuarta vez el teclado no me funciona bien... mientras que las tres primeras me funcionan a la perfección...

SOLUCIONADO! sólo tuve que cambiar la variable i por otra que fuese por ejemplo r.... no sé si la declaración de una variable "i" está siempre supeditada a iterar.

Gracias!!!! :wink: