SISTEMA DE MEDICIÓN DE TEMPERATURA

Hola, como estas estoy diseñando un programa que me ayude a mirar las temperaturas con grados celcius, fahrenheit y kelvin mediente una contraseña.

el problema que tengo con el código es que todo me da pero cuando utilizo una funciones cíclica y dentro de ella le coloco la función keypad.getKey ya no sigue el ciclo si no que se queda con la temperatura que queda inicial mente y no varia hasta que le de otra opción.

#include <Keypad.h> //libreria del teclado
#include <LiquidCrystal.h> //libreria de la pantalla LCD

//variables de led
int led_verde=10;
int led_rojo=11;

//SENSOR TEMPERATURA
float sensor=A5;
float grados;
float Trealc;
float voltajeT;
float Trealf;
float Trealk;

//LCD pines a utilizar 
const int rs = 13, en = 12, d4 = A0, d5 = A1, d6 = A2, d7 = A3;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

//TECLADO declaracion de matrz
const byte FILAS = 4; // Indicar el numero de las filas
const byte COLUMNAS = 4;//Indicar el numero de columnas

// matriz del teclado
char keys[FILAS][COLUMNAS] = {
 {'1','2','3','A'},
 {'4','5','6','B'},
 {'7','8','9','C'},
 {'*','0','#','D'}
};

//Declaracion pines a utlizar para el Teclado
byte Fpines[FILAS] = {9, 8, 7, 6}; 
byte Cpines[COLUMNAS] = {5, 4, 3, 2}; 

Keypad keypad = Keypad( makeKeymap(keys), Fpines, Cpines, FILAS, COLUMNAS );

//clave de ingreso
char clave [5]; 
char clave_correcta [5]= "0000";
byte indice = 0;
char TECLA;
byte chequeo = 0;

//entrada a temperatura
char C = 'A';
char F = 'B';
char K = 'C';
int confirmacion = 0;



void setup() // ----------------------------------------
{
 pinMode(led_verde, OUTPUT);
 pinMode(led_rojo, OUTPUT);
 pinMode(sensor, INPUT);
 lcd.begin(16,2); //Tamañano de la pantalla
 pantalla();

}  // fin funcion setup----------------------------------

void loop()  // -----------------------------------------
{
 TECLA = keypad.getKey();
 
 if(TECLA){
   
   clave [indice] = TECLA;
   indice++;
   lcd.print(TECLA);
   
 } // escritura de la clave
 
   if(indice==4){
 
     for(int a=0;a<4;a++){
       if(clave[a] == clave_correcta [a]){  
         chequeo++;
       }// if de iguardad de clave
        
     }// for de verificacion de clave
    
     if(chequeo == 4){ 
       
       digitalWrite(led_rojo, LOW);
       digitalWrite(led_verde, HIGH);
       delay(2000);
       digitalWrite(led_verde, LOW);
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("Bienvenido");
       delay(5000);
       lcd.clear();  
       lcd.setCursor(0,0);
       lcd.print("Puede mirar la");
       lcd.setCursor(0,1);
       lcd.print("Temperatura en:");
       delay(2000);
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("A)Cel   B)Far");
       lcd.setCursor(0,1);
       lcd.print("C)Kel");
       delay(2000);
       lcd.clear();
       confirmacion++;
       
         while(confirmacion == 1){
     
           TECLA = keypad.getKey();
          
             while(TECLA == C){
              TECLA = keypad.getKey(); 
              lcd.setCursor(0,0);
              lcd.print("GRADOS CELCIUS:");
              grados = analogRead(sensor);
              voltajeT = grados * 5 / 1023;
              Trealc = (voltajeT-0.5)*100;
              lcd.setCursor(0,1);
              lcd.print(Trealc);

             }// while grados celcius
       
             while(TECLA == F){  
               TECLA = keypad.getKey();
               lcd.setCursor(0,0);
               lcd.print("GRADOS");
               lcd.setCursor(0,1);
               lcd.print("FAHRENHEIT");
               grados = analogRead(sensor);
               voltajeT = grados * 5 / 1023;
               Trealc = (voltajeT-0.5)*100;
               Trealf = (Trealc * 1.8) + 32;
               lcd.setCursor(11,1);
               lcd.print(Trealf);
               
             
             }// while grados fahrenheit
       
             while(TECLA == K){  
               TECLA = keypad.getKey();
               lcd.setCursor(0,0);
               lcd.print("GRADOS KELVIN");
               grados = analogRead(sensor);
               voltajeT = grados * 5 / 1023;
               Trealc = (voltajeT-0.5)*100;
               Trealk = Trealc + 273.15; 
               lcd.setCursor(0,1);
               lcd.print(Trealk);
               
             
             }// while grados kelvin 
             
         }// fin while confirmacion para entrar a la temperatura
     }// fin de clave correcta
     
     else{
     
       digitalWrite(led_rojo, HIGH);
       digitalWrite(led_verde, LOW);
       delay(2000);
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("!!ERROR CLAVE!!");
       lcd.setCursor(1,1);
       lcd.print("!!INCORRECTA!!");
       delay(2000);
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("CLAVE:      ");
       lcd.setCursor(9,0);
       
     }// clave incorrecta
     
      indice=0;
     
   }// if indice de la contraseña
} // FIN LOOP --------------------------------------------
           
void pantalla(){
 lcd.setCursor(0,0);
 lcd.print("CLAVE:      ");
 lcd.setCursor(9,0);
}

Para comenzar, no puedes tener diferentes puntos donde lees el teclado.
El teclado se lee en un punto y a otra cosa.

Una vez superada la etapa de validación de clave, todas las demás teclas presionadas deberías afectar al resto de tus necesidades.

Y por otro lado, no uses delay(2000) por todos lados porque lo único que haces es demorar toda la acción buena que puedas tener.

No se puede hacer un programa que demoras a cada instante.
Por favor, no uses delay()!!

Entonces primer paso de acuerdo a mi criterio:

Ve a Documentación => Indice de temas tutoriales => millis() y también lee máquina de estados

Vamos a cambiar todo usando millis() si quieres pausas y usando una maquina de estados en lugar de lo que haces.

Si te parece la idea te voy a ayudar, de lo contrario espera otro consejo.

Moderador
Por favor edita tu titulo usando minúsculas.