01 agosto 2015

Arduino - Programa 05: Efeito Sequencial com LED

Olá, vamos ao quinto tutorial de arduino, desta vez trago o código de um efeito sequencial com LED, a ideia em si é simples, acender sequencialmente dez LED's, mas no entanto o código apresenta uma maneira simples e eficiente de acender os dez LED's sem muito quebra-cabeça. 
Então chega de blá blá, e vamos ao código.



// 05 Programa - Efeito Sequencial



byte ledPin[] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; // laço para declarar os pinos

int ledDelay(65); // intervalo entre as alterações

int direction = 1;

int currentLED = 0;

unsigned long changeTime;

void setup(){ 

// define os pinos com saída

for(int x=0; x<10; x++){

pinMode(ledPin[x], OUTPUT);}

changeTime = millis();

}

void loop(){ 

if((millis() - changeTime)>ledDelay){ // verifica se ja passou ledDelay ms desda a ultima alteração

changeLED();

changeTime = millis();

}

}

void changeLED(){

for(int x=0; x<10; x++){ // apaga todos os led

digitalWrite(ledPin[x], LOW);

digitalWrite(ledPin[currentLED], HIGH); //acende o led atual

currentLED += direction; // incrementa de acordo com o valor direction

// altera a direção se tivermos atingido o fim

if(currentLED == 9) {direction = -1;}

if(currentLED == 0) {direction = 1;}

}


Irei analisar de forma bem rápida este código, pois já temos capacidade de entender o que se passa nas estruturas que já foram mencionadas anteriormente. Observe então a maneira como as saídas digitais estão sendo declaradas, definimos o tamanho delas como byte, fazendo com que menos memória seja ocupada. Em seguida temos colchetes vazios, em igualdade a isso uma chave com as saídas que utilizaremos. Esta é uma maneira rápida de declararmos uma grande quantidade de variáveis com mesma característica. Em seguida utilizamos o comando direction, ele assume somente dois valores (+1 ou -1), esses valores indicam a direção em que o laço percorrerá, sentido positivo ou negativo (imagine a reta dos números reais). Observe que direction foi iniciado em +1, isso fará com que o código inicie do menor para o maior, ou seja, as saídas assumem um valor de 0 a 9, como temos dez LED's, logo o código se inicia em 0 e vai até 9, retornando ao 0 pelo if que está no final, onde se o LED 9 for o último a ser aceso, direction recebe -1, caso contrário direction recebe +1, concluindo assim o loop. 


O comando direction é um comando um pouco vago de teoria no livro, mas acho que podemos pensar nele como um comando para que, dado um conjunto de saídas, podemos acioná-las sequencialmente, para uma dada direção que desejamos. O código tem uma função chamada changeLED(), está função, é responsável por apagar o LED após ele ser acionado.
Destaquei alguns pontos interessantes neste código, a descrição foi bem rápida, porém não dá pra ficar escrevendo um mundo de teoria.

Agora vamos ao melhor, vamos ver como o código funciona na prática, para isso precisaremos dos seguintes materiais:

  1. 1 arduino;
  2. 10 resistores de 300 Ohm;
  3. 10 LED's de 5mm (qualquer cor);
  4. Fios ou jumpers;
  5. 1 protoboard;
Abaixo uma imagem de como deve ser conectado os LED's e os resistores.
Figura 1 - Esquema de conexão dos componentes do hardware.
Logo abaixo trago as fotos da minha montagem, desconsiderem o objeto intruso (minha palheta), no canto inferior direito.
Figura 2 - Minha montagem.
Figura 3 - Minha montagem.
Os programas também podem ser baixados, para isso clique aqui.

Continuando, um vídeo demonstrando o funcionamento do programa.



Espero que tenham gostado deste tutorial, os próximos provavelmente vão demorar mais um tempinho devido ao termino das férias escolares, mas não pensem que eu esqueci do blog. Qualquer dúvida, sugestão, opinião,  deixe o comentário. Até o próximo !


EmoticonEmoticon