ajuda com led para piscar pre programado com variaçao

minha duvida é...eu estou tentando fazer um led piscar em uma sequencia pré-determinada 
exemplo preciso que o led interprete um determinado valor em luz.
tipo cada numero corresponde um um determinado tempo com o led acesso
isso é apenas um exemplo.
1=600ms aceso 200ms apagado
2=950ms aceso 300ms apagado
3=500ms aceso 350ms apagado
 
ai tenho que reproduzir o numero 132
 
no caso o led tem que ascender...
 
600ms aceso 200ms apagado 500ms aceso 300ms apagado 950ms aceso 300 apagado
 
e assim seguindo
desde ja agradeço se alguem puder da uma força
obs tenho um arduino mega 2560   
sou bem iniciante em eletronica e programaçao
mas o led piscar de uma forma uniforme eu ja estou conseguindo.

Exibições: 557

Responder esta

Respostas a este tópico

Olá Johan,

Existem muitas formas para fazer o que você precisa, utilizando interrupções de timer ou uma sequência com delays.
Explicarei algumas.


1) Sequência de delays.

    Nesta forma, você pode simplesmente atuar sobre o acionamento do pino e em seguinda chamar o delay para manter o pino no estado que você definou. Por exemplo:

   // sequencia 1

   digitalWrite(led,HIGH);

   delay(600);

   digitalWrite(led,LOW);

   delay(200);

 // sequencia 2

   digitalWrite(led,HIGH);

   delay(950);

   digitalWrite(led,LOW);

   delay(300);

// etc...


   

Esta forma é bem direta, principalmente para que está começando no mundo da programação. Mas podemos deixar esta solução mais enxuta e por vezes mais flexível fazendo de outra forma, que poderia ser com tabelas.

2) Definições por tabelas.

   Vamos para isso criar uma tabela com os tempos ON e OFF do led para cada entrada.

   Primeiro definimos uma estrutura:

 

   //Definicao da estrutura

struct ControleLed{
    unsigned int _tempoON;
    unsigned int _tempoOFF;
};

Depois montamos a tabela com os valores que queremos:

struct ControleLed Sequencia[] = { {600,200},  // 1
                                                       {950,300},  // 2
                                                       {500,350}};  // 3

#define NUMERO_DE_SEQUENCIAS 3

Agora só precisamos fazer o algoritmo para percorrer a tabela e carregar os tempos de delay.

Que ficaria parecido com:

 for( int i=0; i < NUMERO_DE_SEQUENCIAS,i++){

    digitalWrite(led,HIGH);

    delay(Sequencia[i]._tempoON);

    digitalWrite(led,LOW);

   delay(Sequencia[i]._tempoOFF);

 }

 
Assim você percorre toda a tabela com os valores configuráveis, podendo expandir ela para quantas sequencias quiser. Tomando o cuidado de alterar a variável com o NUMERO_DE_SEQUENCIAS.

Você pode como exercício alterar a estrutura e a tabela para configurar também os valores HIGH e LOW, para você começar uma sequência com o led apagado também, ou só para deixar mais enxuto ainda o algoritmo de varredura.


 Para opção com interrupção, veja o link do fórum do Arduino.

[Link]

 http://forum.arduino.cc/index.php/topic,37875.0.html

 Espero ter ajudado, bons estudos.

 T+.

só bati o olho e ja consegui ter uma noção do que eu preciso fazer muito obrigado mesmo 

e é como vc disse estou começando mas ja sei que terei 

que estudar muuuito para conseguir desenvolver meu projeto 

mas estou muito feliz de ter encontrado esse forum com pessoas dispostas a ajudar 

muito obrigado Daniel Cezar.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço