Hola, estoy usando un LCD y un teclado matricial 4x4 y la cuarta columna de letras (A, B, C Y D) la uso asi:
A = mostrar pantalla para ingresar un valor max en decena y unidad
B = mostrar pantalla para ingresar un valor min en decena y unidad
C = borrar valores equivocados
D = ingresar los valores marcados en pantallas de A y B.
Mi problema es asi, estando en pantalla de tecla A, presiono la tecla B para pasar a su pantalla y no me deja sino presiono a ese boton 3 veces, y antes de la 3° vez me aparece en el LCD un numero de 3 cifras que creo que es el equivalente del valor ascii de la letra B en valor numerico multiplicado por 2 veces, cosa que esta mal porque si estoy en pantalla de tecla B y presiono tecla A del teclado se pasa a pantalla de letra A sin problema alguno y al primer intento.
Les dejo el codigo desde el VOID LOOP, el resto en comentarios. Gracias:
void loop() {
float temperatura = centigrados(); //se iguala variable temperatura a variable centigrados
lcd.setCursor(0, 2); //posicionar texto en columna 0 y fila 2
lcd.print("TEMP.ACTUAL ^C"); //escribir texto en LCD
lcd.setCursor(13, 2);
lcd.print(temperatura); //mostrar resultado de temperatura mas arriba
delay(200);
char teclas = keypad.getKey(); //Guarda en la variable "teclas" el valor pulsado del teclado
if (teclas != NO_KEY) { //Si se ha pulsado una tecla
numero = teclas - 48; //conversión de caracteres ASCII a valores numericos
digitalWrite(buzzer, HIGH);
delay(50);
digitalWrite(buzzer, LOW);
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//PROCESO AL PULSAR BOTON A (INSERTAR VALOR MAX) (TECLA F6)
if (numero == 17) { //Si se pulsa la tecla A entonces (valor ascii A es en valor numerico 17)
digitalWrite(ledAzul, LOW); //apagar led azul
digitalWrite(ledVerde, LOW); //apagar LED verde
digitalWrite(ledRojo, LOW); //apagar led rojo
lcd.clear(); //Se limpia la pantalla del LCD
delay(100); //pausa para pasar a otra pantalla
lcd.setCursor(3, 0); //se ajusta el cursor del LCD
lcd.print("INGRESE NUEVO!"); //se muestra texto en LCD
lcd.setCursor(4, 1);
lcd.print("VALOR MAXIMO");
lcd.setCursor(5, 2);
lcd.print("(0.....99)");
lcd.setCursor(8, 3);
lcd.print(" ^C");
cicloA = 1; //El "cicloA" será igual a 1
numero = -1; //la variable "numero" comienza en -1
contador = 0; //Se iguala la variable "contador" a 0
}
if (cicloA == 1) { //Si el "cicloA = 1", indica que se presiono la tecla A o F6
if (numero >= 0 && contador == 0) { //Si se presiona un boton del teclado y si el "contador = 0" entonces
decenaA = numero; //Se iguala el valor tecleado a la variable "decenaA"
contador++; //Se incrementa el valor del "contador" a 1
numero = -1; //la variable "numero" comienza en -1
delay(50);
}
if (numero >= 0 && contador == 1) { //Si se presiona una digito y contador=1 entonces
unidadA = numero; //Se iguala el valor tecleado a la variable "unidadA"
contador++; //Se incrementa al valor del contador a 2
numero = -1; //la variable numero comienza en -1
delay(50);
valorA = (decenaA * 10) + unidadA;
tmax = valorA;
lcd.setCursor(8, 3); //posicionar cursor del LCD
lcd.print(valorA); //mostrar en LCD valores de temperatura
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
//PROCESO AL PULSAR BOTON B (INSERTAR VALOR MIN) (TECLA F5)
if (numero == 18) { //Si se pulsa la tecla B entonces
digitalWrite(ledAzul, LOW); //apagar led azul
digitalWrite(ledVerde, LOW); //apagar LED verde
digitalWrite(ledRojo, LOW); //apagar led rojo
lcd.clear(); //Se limpia la pantalla
delay(100); //pausa para pasar a otra pantalla
lcd.setCursor(3, 0); //se ajusta el cursor
lcd.print("INGRESE NUEVO!");
lcd.setCursor(4, 1); //Se ajusta el cursor a una determinada posición
lcd.print("VALOR MINIMO"); //mostrar texto en LCD
lcd.setCursor(5, 2);
lcd.print("(0.....99)");
lcd.setCursor(8, 3); //posicionar cursor del LCD
lcd.print(" ^C"); //escribir textos
cicloB = 1; //El cicloB será igual a 1
numero = -1; //variable char numero se iguala a -1
contador = 0; //Se iguala la variable "contador" a cero
}
if (cicloB == 1) { //Si cicloB = 1, indica que se presiono la tecla B
if (numero >= 0 && contador == 0) { //Si se presiona una digito y contador=0 entonces
decenaB = numero; //Se iguala el valor tecleado a la variable "decenaB"
contador++; //Se incrementa al valor del contador a 1
numero = -1; //variable char numero se iguala a -1
delay(50);
}
if (numero >= 0 && contador == 1) { //Si se presiona una digito y contador=1 entonces
unidadB = numero; //Se iguala el valor tecleado a la variable "unidadB"
contador++; //Se incrementa al valor del contador a 2
numero = -1; //variable char numero se iguala a -1
delay(50);
valorB = (decenaB * 10) + unidadB;
tmin = valorB;
lcd.setCursor(8, 3); //Se ajusta el cursor a una determinada posición
lcd.print(valorB); //Se imprime en el LCD el numero obtenido en la variable "valorB"
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//PROCESO AL PULSAR BOTON C (BORRAR NUMEROS EQUIVOCADOS) (TECLA F4)
if (numero == 19) { //Si se pulsa la tecla C entonces
delay(100); //pausa antes del borrado de numeros
lcd.setCursor(8, 3); //Se ajusta el cursor del LCD
lcd.print(" "); //mostrar texto vacio en LCD
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//PROCESO AL PULSAR EL BOTON D (ENTER) (F3)
if (numero == 20) { //si se pulsa la tecla D entonces
digitalWrite(ledVerde, HIGH); //encender led verde
lcd.clear(); //limpiar pantalla
delay(100);
lcd.setCursor(0, 0); //posicionar cursor en columna 0 y fila 0
lcd.print("EN FUNCIONAMIENTO..."); //escribir texto en LCD
lcd.setCursor(0, 1); //posicionar cursor en columna 0 y fila 1
lcd.print("TEMP.MAX ^C"); //escribir texto en LCD
lcd.setCursor(16, 1);
lcd.print(valorA); //mostrar valorA maximo en LCD
lcd.setCursor(0, 3); //posicionar texto en columna 0 y fila 3
lcd.print("TEMP.MIN ^C"); //escribir texto en LCD
lcd.setCursor(16, 3);
lcd.print(valorB);
}
}
if (temperatura >= tmax) { //si el valor de temperatura es mayor o igual al valorA
digitalWrite(ledAzul, LOW); //apagar led azul
digitalWrite(ledRojo, HIGH); //encender led rojo
digitalWrite(transistor2, HIGH); //encender transistor 2
}
else {
digitalWrite(ledRojo, LOW); //apagar led rojo
digitalWrite(transistor2, LOW); //apagar transistor 2
}
if (temperatura <= tmin) { //si el valor de temperatura es mayor o igual al valorB
digitalWrite(ledRojo, LOW); //apagar led rojo
digitalWrite(ledAzul, HIGH); //encender led azul
digitalWrite(transistor1, HIGH); //encender transistor 1
}
else {
digitalWrite(ledAzul, LOW); //apagar led azul
digitalWrite(transistor1, LOW); //apagar transistor 1
}
}