Estou desenvolvendo um código para Controlar Relês por um controle Remoto IR. Até ai nenhuma novidade.. Só que ao contrario de códigos que encontrei na NET, não quero deixar os códigos das teclas "Hard Code" no programa. Quero que os códigos sejam gravados na memória. 

Dessa forma, quando eu deseje utilizar um novo controle remoto ou uma nova tecla, eu não precise reprogramar o código do Arduino.  Então eu pressiono um Botão, e a Aplicação guarda o código que foi lido pelo sensor IR.

Então vamos ao problema.

Já consegui fazer 99% do código. rsrs. Consegui guardar o código da tecla na EPROM e também já consegui Recuperar da EPROM o valor gravado correspondente a tecla.

O problema é que o Comando Swicth Case. só aceita variável do tipo Const Int e não consigo mover o valor recuperado da memória para essa variável. 

Se precisar, eu posto o código inteiro mais tarde, pois não estou com ele em mãos no momento. 

Exemplo:

const int  TECLA_RELE_1; // Variável onde guardo o codigo da tecla ref ao rele 1

const int  TECLA_RELE_2; // Variável onde guardo o codigo da tecla ref ao rele 2

int VALOR_LIDO_IR; // armazena o valor lido pelo sensor IR 

get values ()

TECLA_RELE_1 = MEM_TECLA_RELE_1; // Recupero o valor correspondente a tecla da eeprom e movo para a variável global para depois eu verificar se o valor lido pelo IR é igual o valor recuperado. Mas da erro. pois a variável TECLA_RELE_1 é somente leitura

Switch (VALOR_LIDO_IR) 

   case TECLA_RELE_1:

 // executa as instruções para mudar o estado do rele

   case TECLA_RELE_2:

 // executa as instruções para mudar o estado do rele

...

Obrigado.

Exibições: 619

As respostas para este tópico estão encerradas.

Respostas a este tópico

Oi Fabiano, boa tarde,

Você declarou TECLA_RELE_1 e TECLA_RELE_2, como constantes, e não como variáveis.

Não lembro no Arduino, mas no C, constantes tem um valor determinado, e não podem ser mudadas.

Veja tb  http://renatoaloi.blogspot.com.br/2011/11/constantes-do-arduino.html

Rui

Boa tarde Rui. 

Sim, você está correto.  O problema é que se eu declarar TECLA_RELE_1 e TECLA_RELE_2 como Variáveis (Apenas Int), ai dá erro na linha do case TECLA_RELE_1! Diz que tem que ser do tipo Constante. hehe. 

Queria evitar usar o IF, pois com o Switch o código fica mais limpo.  O Case não funciona com variáveis?  

Até pensei em usar uma Matriz. Tipo: uso o índice na primeira linha e o código na segunda, mas ai fica meio complexo.  

(É que eu sou do Cobol e não manjo muito do C hehe), 

Muito obrigado. 

Amigo, se não funciona com switch, vá de IF mesmo... mais vale um sketch "feio" funcionando do que um sketch "elegante" imprestável

Depois que vc construir teu projeto e deixar tudo funcionando, aí sim parta pro aprimoramento, tornando-o mais limpo

A grande vantagem da programação é que o usuário final não precisa ter acesso ao código fonte. Assim, fica fácil esconder os esqueletos

TECLA_RELE_1 e TECLA_RELE_2 devem ser declaradas como constantes que o são , mas VALOR_LIDO_IR . tem que ser declarado só como Int , pois é a variável que comanda o switch !

O problema é que desta forma, não consigo armazenar nestas variáveis (TECLA_RELE_1 e TECLA_RELE_2) os valores recuperados da EPROM.

Acabei por usar IF mesmo, como sugeriu o colega imhugo.. 

Coloquei em anexo o Código, caso algum colega queira dar alguma sugestão de melhoria.  

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço