Arduino Teclado de Membrana e Touch

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.

1 Like