Go Down

Topic: Problemas com Teclado Telefônico (Read 884 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