Olá!
Seu erro está aqui:
switch (leitura_teclas)
{
case 'A':
Serial.println("Informe o CPF e confirme clicando na letra C: ");
if (leitura_teclas == 'C') // Se a tecla 'C' foi pressionada
Você está tentando avaliar se a tecla 'C' foi pressionada dentro de um case. A passagem por este trecho é muito rápida e não daria para pressionar a tecla no momento correto.
Além disso, não há uma atualização na leitura do teclado dentro deste case.
Veja se isso te ajuda:
#include <Password.h> // Biblioteca utilizada para controle de senha
#include <Keypad.h> // Biblioteca para controle do teclado de matrizes
const byte LINHAS = 4; // Linhas do teclado
const byte COLUNAS = 4; // Colunas do teclado
String leitura;
Password senha = Password("25677032840"); // Senha utilizada para liberacao
const int pinoSensor = 11; // PINO DIGITAL UTILIZADO PELO SENSOR
const int pinoLed = 12; // PINO DIGITAL UTILIZADO PELO LED
byte indiceMenu = 0;
const char TECLAS_MATRIZ[LINHAS][COLUNAS] = { // Matriz de caracteres (mapeamento do teclado)
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }
};
const byte PINOS_LINHAS[LINHAS] = { 9, 8, 7, 6 }; // Pinos de conexao com as linhas do teclado
const byte PINOS_COLUNAS[COLUNAS] = { 5, 4, 13, 10 }; // Pinos de conexao com as colunas do teclado
Keypad teclado_personalizado = Keypad(makeKeymap(TECLAS_MATRIZ), PINOS_LINHAS, PINOS_COLUNAS, LINHAS, COLUNAS); // Inicia teclado
void setup()
{
Serial.begin(9600);
Serial.println("T.I.S.A.");
pinMode(pinoSensor, INPUT); // DEFINE O PINO COMO ENTRADA
pinMode(pinoLed, OUTPUT); // DEFINE O PINO COMO SAÍDA
}
void loop()
{
char leitura_teclas = teclado_personalizado.getKey();
if (digitalRead(pinoSensor) == HIGH) { //SE A LEITURA DO PINO FOR IGUAL A HIGH - SENSOR TOQUE
{
digitalWrite(pinoLed, HIGH); // ACENDE O LED
Serial.println("Olá! Seja bem vindo(a).");
Serial.println("Iniciando...");
Serial.println("Você deseja se identificar por biometria ou CPF?");
Serial.println("A - CPF");
Serial.println("B - BIOMETRIA");
}
switch (indiceMenu)
{
case 0:
if(leitura_teclas == 'A')
{
indiceMenu = 1;
Serial.println("Informe o CPF e confirme clicando na letra C: ");
}
else if(leitura_teclas == 'B')
{
Serial.println("Aproxime o dedo do leitor");
indiceMenu = 2;
}
break;
case 1:
if (leitura_teclas == 'C') // Se a tecla 'C' foi pressionada
{
if (senha.evaluate()) // Verifica se a senha digitada esta correta
{
Serial.println("Senha confirmada!"); // Exibe a mensagem que a senha esta correta
}
else // Caso a senha esteja incorreta
{
Serial.println("Senha incorreta!"); // Exibe a mensagem que a senha esta errada
indiceMenu = 3;
}
senha.reset(); // Limpa a variavel senha
}
else // Caso outra tecla tenha sido pressionada
{
if(leitura_teclas)
{
Serial.println(leitura_teclas); // Exibe a tecla pressionada
senha.append(leitura_teclas); // Salva o valor da tecla pressionada na variavel senha
}
}
break;
case 2:
// Verifica biometria
break;
case 3:
// Você está numa área restrita autorizada por senha.
break;
default:
Serial.println("Pressione apenas A ou B");
break;
}
}
Abraço.