Diferenciar dos pulsaciones distintas de un mismo botón en un Keypad

Hola a todos. Hoy el problema que me ocupa es que estoy con un tema de teclado keypad (y lcd 16x02), el tipico de al poner una clave hace tal (abre cerradura, activa un salida, etc).

La situación es la siguiente:

Como digo, al introducir la clave correcta y pulsar "A" del Keypad (4x4) autoriza la acción y enciende un led, y si la clave no es correcta y se pulsa la "A" dice "error" y enciende otro led que indicaría lo que ha ocurrido.

Hasta aqui todo sencillo con if o if/ else. Pero ahora viene lo que me tiene atascado...

-Si pongo el código correcto y seguido pulso la "A" hace lo que debe hacer (autoriza y enciende su correspondiente led).

-Si pongo un código erróneo y pulso la "A", también hace lo que debe hacer ( que es no permitir acceso y enciende su correspondiente led).

-Pero si no pongo código alguno y simplemente pulso la "A" (sin ninguna otra tecla pulsada antes) me hace exactamente lo mismo que si pongo un código erróneo. O sea me dice error y enciende el led de error, al no detectar antes que se ha tecleado el código que era el correcto.

Como puedo evitar que esto suceda?, que si pulso solamente A sin antes pulsar nada no me diga que es error, sino que diferencie esa pulsacion si la hago despues de teclear un numero (erroneo o cierto) a si la pulso antes sin introducir ninguna pulsación anterior.

void leerIngreso(int a) {
  ingreso = kpd.getKey();
  if (ingreso != NO_KEY)
    switch (ingreso)
    {
      case 'A':                        // es el "enter" para introducir la password
        if  (evaluar(1) == 1)    // Comprueba si el codigo introducido es correcto
            correcto();              // vamos a la funcion void correcto()
         
   
        if (evaluar(1) != 1)     // Comprueba si el codigo introducido no es el correcto (y no lo es) 
        msgError();               // vamos a la funcion void Error()
  
        reset();                     // vamos a la funcion void reset()
        break;                      // damos por terminado y salir de aqui

Gracias y saludos a todos

Me costo entender lo que queires hacer por presentar solo una rutina y no todo el código como siempre pedimos, (algo que con +100 msgs) deberías saber.

el problema parece estar en evaluar() que no has indicado que hace, ella debería darte tres respuestas
1 correcto
0 incorrecto
algo mas para no hago nada.

surbyte tienes toda la razón del mundo en lo de poner todo el código, de hecho siempre lo he hecho, pero es que no lo encuentro!!! para mi que de tanto cambiar y probar lo he borrado :’( .

Tengo otra vez el problema que tuve hace un tiempo (y puse un post preguntando tambien eso) que cada vez que abro el ide me abre el ultimo abierto, es decir que si abro uno un blanco, lo cierro, la siguiente vez que abra el que sea (aunque sea uno guardado anteriormente) me abre directamente en blanco. Si hago uno y lo cierro (guardandolo o no) y ahora abro otro guardado anteriormente… me abre el este de ahora pero con el texto anterior no con el que tenia, por tanto se pierde lo que habia dentro de este ultimo.

Pero estoy en ello, para intentar ponerlo entero y no solo esa parte (que la puse mientras, ya que era donde no daba pie con bola)

Entonces un consejo, prueba con DEVIOT + Sublime Text + Platformio.
Hace unos dias respondí por ese tema en esta sección. Debe estar en la primera máximo la segunda página.

lo miro a ver si soluciono este tema primero (que se me queda cada vez que abro el ultimo sketch abierto o usado)…gracias

Deviot