Amigos, venho enchê-los novamente.

Alguns amigos e eu estamos trabalhando num projeto para final de curso. Um dos componentes que temos usado é um teclado matricial. Mas o temos tido problemas no código.

Usando como base um projeto do parceiro Marcelo Rocha do FisicArduino estamos desenvolvendo um sistema de senhas, porém um pouco mais complexo.

O problema é o seguinte: Quando digito uma tecla pela primeira vez, o programa entende perfeitamente o que foi digitado, até mesmo mostra o resultado numa tela lcd se necessário. A segunda vez que vou digitar uma tecla ele não associa mais as teclas aos dígitos, e com isso fica como NO_KEY.

Vou colocar uma parte do código (se for colocar todo o código vai ficar um post imenso):

*Vão ver alguns voids pelo caminho, mas não influenciam no teclado.

#include <EEPROM.h>

#include <Keypad.h>

#include <LiquidCrystal.h>

#include <Wire.h>


//Inicialização do Display
LiquidCrystal lcd(A4, A5, A0, A1, A2, A3);


int count101 = 0; //Contadores
int count102 = 0;
int count201 = 0;
int count202 = 0;
int count301 = 0;
int count302 = 0;
int count = 0;
int cnt = 0;
int contador = 0;
const int yellowPin = 11; //Definição do pino do LED Amarelo
const int redPin = 12; //Definição do pino do LED Vermelho
const int greenPin = 10; //Definição do pino do LED Verde
const int audioPin = 9; //Definição do pino do Buzzer
const int duration = 200; //Duração das sons tocados
const byte ROWS = 4; //Quatro linhas
const byte COLS = 3; //Três colunas

//Mapeamento de teclas
char keys[ROWS][COLS] = {
{
'1','2','3' }
,
{
'4','5','6' }
,
{
'7','8','9' }
,
{
'*','0','#' }
};
byte rowPins[ROWS] = {
5, 4, 3, 2}; //Definição de pinos das linhas
byte colPins[COLS] = {
6, 7, 8}; //Definição de pinos das colunas

//Cria o teclado
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
//Programa inicial
void setup(){
lcd.begin(16, 2); //Inicializa o LCD
Serial.begin(9600); //Inicializa a comunicação serial a 9600 bps

//Deifinição de modo dos pinos
pinMode(audioPin, OUTPUT);
pinMode(yellowPin, OUTPUT);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
lcd.clear(); //Limpa LCD
key_init(); //Inicializa o sistema
}


//Loop Principal do Programa
void loop(){

char key = keypad.getKey(); //Obtém tecla pressionada
if (key != NO_KEY){ //Se foi pressionada uma tecla:

if (key == '#') { //Se a tecla é '#'
code_entry_init(); //Então espera que seja inserida uma senha
entrada_senha();
}
else if (key == '*'){
troca_senha();
}
}
}

void entrada_senha(){
int entrada = 0;
lcd.setCursor(0,1);
lcd.print("Senha:");
char key0 = keypad.getKey(); //Obtém tecla pressionada
keypad.waitForKey();
lcd.print(key0);
if (key0 == '#'){
key_init();
}
else{
entrada += 1; //Faz entrada = entrada + 1
tone(audioPin, 1080, 100); //Para cada dígito emite um som de indicação
delay(duration); //Duração do som
noTone(audioPin); //Para de emitir som
lcd.print(key0);
lcd.print("*");
}

char key1 = keypad.getKey(); //Obtém tecla pressionada
keypad.waitForKey();
if (key1 == '#'){
key_init();
}
else{
entrada += 1; //Faz entrada = entrada + 1
tone(audioPin, 1080, 100); //Para cada dígito emite um som de indicação
delay(duration); //Duração do som
noTone(audioPin); //Para de emitir som
lcd.print("*");
}

char key2 = keypad.getKey(); //Obtém tecla pressionada
keypad.waitForKey();
if (key2 == '#'){
key_init();
}
else{
entrada += 1; //Faz entrada = entrada + 1
tone(audioPin, 1080, 100); //Para cada dígito emite um som de indicação
delay(duration); //Duração do som
noTone(audioPin); //Para de emitir som
lcd.print("*");
}

char key3 = keypad.getKey(); //Obtém tecla pressionada
keypad.waitForKey();
if (key3 == '#'){
key_init();
}
else{
entrada += 1; //Faz entrada = entrada + 1
tone(audioPin, 1080, 100); //Para cada dígito emite um som de indicação
delay(duration); //Duração do som
noTone(audioPin); //Para de emitir som
lcd.print("*");
}

}

Exibições: 677

Responder esta

Respostas a este tópico

Raphael,

Conseguiu resolver seu problema?

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço