Go Down

Topic: Problemas com Teclado Telefônico (Read 932 times) previous topic - next topic

Kaworu

Olá, boa tarde!

Estou com alguns problemas ligando um teclado telefônico ao Arduino (Freeduino BR / Arduino NG com ATMega 8-16 PU):

Estou usando uma versão modificada da bibliteca de keypad daqui que coloco aqui embaixo:

Code: [Select]


// Teste de Teclado Telefônico baseado no arquivo de Mark Stanley <mstanley@technologist.com>

#include <keypad.h>

#define ROWS 4
#define COLS 3

keypad kpd = keypad(ROWS, COLS);

//#define COL0      6
//#define COL1      5
//#define COL2      4
//#define COL3      7
//#define ROW0      3
//#define ROW1      2
//#define ROW2      1
//#define ROW3      0

int LedPin = 13 ;               // Sinaliza que o pino 13 é ligado ao LED

void setup()
{
 kpd.init();                   // Inicia o teclado em matriz 4x3
 pinMode(LedPin, OUTPUT);      // Acerta o pino do LED como saída
 Serial.begin(9600);           // Inicia a conexão serial em 9600 bauds
 Serial.print("Pronto");       // Sinaliza ao operador
}

void loop()
{
 char key = kpd.get_key();      // Quantifica a variavel key sobre o comando digitado no teclado
 if(key != '\0')                // Logo, se key é de valor diferente de \0
 {
   Serial.print(key);           // Será mostrado no monitor serial este valor
   digitalWrite(LedPin, HIGH);  // Acende o Led, para indicativo de tecla apertada
   delay (100);                 // Delay de 0,1 s para a piscada
   digitalWrite(LedPin, LOW);   // Apaga o Led, para indicativo de tecla apertada
 }

 delay(100);                    // Delay de 0,1 s para envio de dados

}




O problema é o seguinte: Não sei ONDE está o problema, mas a questão é que tanto no monitor serial quanto no LED, há entrada de dados sem eu sequer tocar no teclado, como por exemplo, está ocorrendo agora :-D

Isto é o que eu recebo do monitor:

Code: [Select]


Pronto71322222223333333333333333252556556666665555555555555552222333666633333333322222333663333333333333222



Somente os dígitos como o 1 foi algo que de fato eu digitei, o resto surgiu.

Presumo ser o teclado, mas, como não tenho como ter esta certeza... Vou ter que destroçar mais um telefone... :D

See ya! []'s
Helio Ribeiro (Não, não o do rádio :D)
Santo André - SP

Rafael Quines

Amigo, colocou resistores de pull-up ou pull-down?! ou pelo menos ativou o pull-up interno dos inputs?!
rafaelquines@gmail.com
http://arduinors.net
http://rafaelquines.com

Kaworu

É, dito e feito. Coloquei o pullup pelo código e deu certo.

Estou com problemas ainda, só que neste caso são inerentes a parte em que eu posso quebrar em fúria :-D

Valeu pela ajuda Rafael.

Código para quem quiser usar o programinha, só atualizar o início.

Code: [Select]

// Teste de Teclado Telefônico baseado no arquivo de Mark Stanley <mstanley@technologist.com>

#include <keypad.h>

#define ROWS 4
#define COLS 3

keypad kpd = keypad(ROWS, COLS);

//#define COL0      6
//#define COL1      5
//#define COL2      4
//#define COL3      7
//#define ROW0      3
//#define ROW1      2
//#define ROW2      1
//#define ROW3      0

// Colunas = pinos de saída / Linhas = pinos de entrada

// Definição do bloco de pinos que será usados com pull-up nos pinos de ENTRADA

int lin0 = 3;                   // Linha 1 - Pino 3 - Compreende caracteres 1 2 3
int lin1 = 2;                   // Linha 2 - Pino 2 - Compreende caracteres 4 5 6
int lin2 = 1;                   // Linha 3 - Pino 1 - Compreende caracteres 7 8 9
int lin3 = 0;                   // Linha 4 - Pino 0 - Compreende caracteres * 0 #

int LedPin = 13 ;               // Sinaliza que o pino 13 é ligado ao LED

void setup()
{
 pinMode(lin0, INPUT);         // Transforma o pino 3 em entrada
 pinMode(lin1, INPUT);         // Transforma o pino 2 em entrada
 pinMode(lin2, INPUT);         // Transforma o pino 1 em entrada
 pinMode(lin3, INPUT);         // Transforma o pino 0 em entrada
 
 kpd.init();                   // Inicia o teclado em matriz 4x3
 pinMode(LedPin, OUTPUT);      // Acerta o pino do LED como saída
 
 digitalWrite(lin0, HIGH);     // Sinaliza uso de Pull-Up na Linha 1
 digitalWrite(lin1, HIGH);     // Sinaliza uso de Pull-Up na Linha 2
 digitalWrite(lin2, HIGH);     // Sinaliza uso de Pull-Up na Linha 3
 digitalWrite(lin3, HIGH);     // Sinaliza uso de Pull-Up na Linha 4
 
 Serial.begin(9600);           // Inicia a conexão serial em 9600 bauds
 Serial.print("Pronto");       // Sinaliza ao operador
 
}


See ya! []'s
Helio Ribeiro (Não, não o do rádio :D)
Santo André - SP

kanibal

vc tem o desenho ou fotu do circuito ai parceiro?
eh q to tentando montar aki mais n tenhu nem ideia!!!
abraços

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy