Ir ao conteúdo

Controle remoto microcontrolado


Andre Mathias

Posts recomendados

Postado

E aí pessoal!!

Estou precisando da ajuda de vocês...

O problema é o seguinte:meu projeto de conclusão de curso é um controle remoto para desligar cargas(relés) que pretendo fazer com um PIC programado em C, e o que tá pegando é como fazer a leitura do teclado do transmissor que será uma matriz 3x4.Os principais problemas são como fazer a filtragem(debounce) dessa matriz???Tenho o livro do Fábio pereira que tem um exemplo de programa com teclado matricial , mas não consigo adapta-lo para meu caso!

E como posso fazer para enviar por exemplo o numero 15?porque só consigo pensar em codigos que enviem uma tecla de cada vez(de 0 a 9)

O codigo atual está assim:

//Definições da matriz do teclado
#define COL1 pin_a2
#define COL2 pin_a3
#define COL3 pin_a4
#define LIN1 pin_b4
#define LIN2 pin_b5
#define LIN3 pin_b6
#define LIN4 pin_b7

main()
{ int tecla_pres;


while (true)
{
tecla=trata_teclas();

envia_tecla();


delay_ms(10); //tempo entre varredura do teclado
}


struct trata_teclas (void)
{

int tecla_atual;
int tecla_pres;
tecla_atual=varre_teclas();
tecla_pres=tecla_atual;
return (tecla_pres);
}


trata_teclas (void) //rotina de filtragem das teclas

Não sei ao certo o que fazer aqui!!!!

tecla_atual=varre_teclas();


char varre_teclas(void) //realiza a varredura das teclas e
//retorna o valor da tecla pressionada

// o tecaldo está conectado da seguinte forma :
// COL1 COL2 COL3
//LIN1 1 2 3
//LIN2 4 5 6
//LIN3 7 8 9
//LIN4 S 0 E

//S-shift E-enter
//
//Os valores decimais retornados são:
// Sem shift Com shift
//0 48 80
//1 49 81
//2 50 82
//3 51 83
//4 52 84
//5 53 85
//6 54 86
//7 55 87
//8 56 88
//9 57 89
//E 13 13
{
int tecla;
output_high(COL1); //ativa a primeira coluna
output_low(COL2);
output_low(COL3);
if(input(LIN1)) tecla=49;
if(input(LIN2)) tecla=52;
if(input(LIN3)) tecla=55;
if(input(LIN4)) shift=1;
output_low(COL1); //ativa a segunda coluna
output_high(COL2);
if(input(LIN1)) tecla=50;
if(input(LIN2)) tecla=53;
if(input(LIN3)) tecla=56;
if(input(LIN4)) tecla=48;
output_low(COL2); //ativa a terceira coluna
output_high(COL3);
if(input(LIN1)) tecla=51;
if(input(LIN2)) tecla=54;
if(input(LIN3)) tecla=57;
if(input(LIN4)) tecla=13;
if((shift)$$(tecla=13)) tecla=tecla+32
return(tecla);

void envia_tecla()
{
while(txsta.trmt);
txreg=tecla_pres;
}

Postado

O debounce pode ser feito simplesmente dando chamando um delay de 50ms no momento em que uma tecla for pressionada!

para fazer a leitura voce pode usar duas variaves, uma pro primeiro algarismo e outra pro segundo compondo o numero!

assim se por exemplo o usuário digitar 9 ele digita em vez disso 09 entendeu?

duvidas pergunte!

abs.

Postado

mas aonde vai esse delay?

e quanto a ser duas variaveis para os numeros, eu queria enviar somente um byte(0 a 255) para o receptor...

Parei um pouco pra pensar e cheguei a essa rotina:

trata_teclas (void) //rotina de filtragem das teclas

{

int tecla_atual=0;

int tecla_pres;

tecla_atual=varre_teclas();

if (tecla_atual)

{delay_ms (50);

tecla_pres=varre_teclas();

if (tecla_atual==tecla_pres)

{ return (tecla_pres); }

}

Se tiver alguma falha ou algum modo de melhorá-la, por favor me avisem!!!!

pow...

ninguem "fala" nada...

alguem aí conhece um tutorial que mostre como fazer um teclado matricial???

porque eu estou em duvida na escolha dos resistores de pull-down. Alguem conhece u valor médio para ser utilizado?

Postado

Já entendi o funcionamento dos teclados , um link bacana é http://www.rogercom.com/PortaSerial/ControleAcesso/ControlePag2.htm.

Percebi que o PIC que estou usando no transmissor (16f628) tem resistores de pull-up no portb(linhas) então é só configurar e inverter a lógica da rotina "varre_teclas" !

e sobre o debounce alguém sabe se essa rotina que postei anteriormente pode ser melhorada??

  • Coordenador
Postado

Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!