Ingresar datos con teclado, mientras un sensor lee y compara

Buenas noches.

el programa que estoy haciendo a breves rasgos :

lectura de un sensor
lectura de un valor ingresado desde un teclado (set point)
ejecutar una acción de control
comparación de ambos valores
ejecutar una acción de control

pero el programa se queda "atrapado" en la función del teclado (el sensor no vuelve a leer)
al menos cuando no se presiona ninguna tecla, al presionar una tecla
el loop continua, pero deseo que tambien continue cuando no se presiona ninguna tecla

(ya probe con lo del millis y no me funcionó)

void tecladomatricial()
{ 

while(on)                                           //lo siguiente sucede mientras "on" sea verdadero
                                                        //on es declarado verdadero al principio de cada loop
{
  char modo=tecla.getKey();            //se toma una variable char llamada modo

  if(modo){                    //solo tomar en cuenta si la variable modo se encuntra activa
switch(modo)                
{
 
case'A':
alfa();                          //funcion para ingresar valores con el teclado, alfa() se detalla más abajo
set=q;
on = false;
break;

case'B':          
beta();                         //funcion para mostrar valores
on = false;
break;

case'C':
gamma();                  //funcion para mostrar otros valroes
on = false;
break;

case'D':
menu();                       //funcion que muestra un menu
on = false;
break;

case'*':
lcd.clear();                    //funcion para no mostrar nada en display (es relleno)
on = false;
break;




}
}
} 
}



void alfa()                    //opcion que permite ingresar un valor de voltaje rms
{
  q=0;                         // variable momentanea 
  int set=0;                 //se declara variable set (set point)
 


    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("int val & prez #");      // el display dice: introduce valor y presiona #(un enter)
    lcd.setCursor(0,1);



bool on2=true;                             //sea on2 verdad

while(on2)                                    //mientras on2 sea verdad se cumple lo siguiente
{ 
  char num=tecla.getKey();             //se toma una variable tipo caracter

  switch(num)                                   
{
 case('1'):
 case('2'):
 case('3'):
 case('4'):
 case('5'):
 case('6'):
 case('7'):
 case('8'):
 case('9'):
 case('0'):
 lcd.print(num);
       q = q * 10 + num- '0';                  //al presionar del 0-9 el numero digitado se escribe en la 
                                                           //variable q, al volver a presionar la "q" previa se multiplica por 
                                           //10 y se suma el nuevo dijito....de esta manera se ingresan los valores
      
        break;

 case('#'):
 
 return ;                            //al presionar #, se vuelve a la funcion tecladomatricial(); y se abandona
                                        //la funcion alfa();
}
}
}

Lo que has publicado es una porción del código y ya que tu no sabes resolverlo es importante que plantees el código completo para nosotros evaluar que tiene o no relevancia.

luego esto tal vez este bien pero no lo había visto

       case('1'):
       case('2'):
       case('3'):
       case('4'):
       case('5'):
       case('6'):
       case('7'):
       case('8'):
       case('9'):
       case('0'):

para que los (), va sin () como en el primer switch case.

Lo que haría yo sería esto.

Primero si no te funciona cuando presionas '*' que no tiene nada entonces tienes otro problema.

Asi que prueba con eso.. a ver si funciona.

Aclaro que millis() no tiene nada que hacer en todo esto.
En lo personal no me gusta como lo estas encarando usando los while que justamente atrapan las cosas cuando no estan bien programadas.

Necesitamos código completo y que quieres hacer. Sin la idea general el código no significa nada para nosotros.