Pages: [1]   Go Down
Author Topic: Problemas com Teclado Telefônico  (Read 714 times)
0 Members and 1 Guest are viewing this topic.
Santo André - Brazil
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:

// 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:

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... smiley-grin

See ya! []'s
Logged

Helio Ribeiro (Não, não o do rádio smiley-grin)
Santo André - SP

0
Offline Offline
Newbie
*
Karma: 0
Posts: 48
http://arduinors.net
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Amigo, colocou resistores de pull-up ou pull-down?! ou pelo menos ativou o pull-up interno dos inputs?!
Logged


Santo André - Brazil
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

É, 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:
// 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
Logged

Helio Ribeiro (Não, não o do rádio smiley-grin)
Santo André - SP

0
Offline Offline
Newbie
*
Karma: 0
Posts: 1
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Pages: [1]   Go Up
Jump to: