Nesta segunda parte vou evoluir o programa usado para controlar vários LEDs usando um loop baseado na instrução "for" suportada pelo microcontrolador do Arduino.
![Clique para ampliar Clique para ampliar](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZ_bYcug1qaX0ILVXOTDr-Cy49LVWCsuNSvK8rMVcnzDviNCXaSImblCIUZKWa0q9_ID9VtR00kx-kKWmcLiTXkNX6kzunKrXjuGbiD2kEW03Wal5VsCaMhOXH7YdLHSovOAH9tESndF4/s200/img_6882.jpg)
O código a seguir contem as instruções necessárias para configurar as portas digitais como saída e acender/apagar os LEDs ligados a estas portas em sequência.
#define QTD_LEDS 6
int porta[QTD_LEDS] = {2,3,4,5,6,7};
int pausa = 500;
void setup() {
for(int i = 0;i < QTD_LEDS; i++) {
pinMode(porta[i], OUTPUT);
}
}
void loop() {
for(int i = 0;i < QTD_LEDS; i++) {
digitalWrite(porta[i], HIGH);
delay(pausa);
digitalWrite(porta[i], LOW);
}
for(int i = QTD_LEDS - 1;i == 0; i--) {
digitalWrite(porta[i], HIGH);
delay(pausa);
digitalWrite(porta[i], LOW);
}
}
Na linha 3 do código acima é definido um array contendo em cada posição o número de cada porta ocupada por um LED. O uso da estrutura array facilita e simplifica o acesso em sequência ao número de cada porta usada para fazer a respectiva configuração na função "setup()" e o controle de cada LED em loop na função "loop()".
![Clique para ampliar](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4DE0EmXXlZPOiAMVjRcA6yYinQGWnkizRoIBxo_m_P5GfArfGQyLU76OJJlgXnrewzUMVQ7PQDBDtM3kPrKPOQCMOeaIXThULOkHf7Hk8zkGKvdU6z7LmrTJx1gUBhhoa5pqnn1wL7HI/s200/img_6886.jpg)
![Clique para ampliar](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQKiZa2BSGf4beBrBa2vWupRoLEXsTILS8vgfhVafGdSzyLhwLfiR0bl81T6dS7FolrlulhButyjOIYE-ExdvRPrjXCbAuWT-IzqxYtwskOJf-yKJrO77m5hl0x1qiC6VgfQuseqh6j50/s200/img_6887.jpg)
O video a seguir mostra a execução do programa implementado acima já instalado e rodando dentro do Arduino.
Agora vamos fazer uma pequena evolução neste exemplo para incorporar uma chave que permite mandar um bit para o programa através de porta digital 8. Usando este bit podemos controlar a direção que os LEDs acendem/apagam ao aplicar a instrução "if" sobre as linhas de código que realizam o loop dentro da função "loop()".
![Clique para ampliar](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4bYtK-Tff7ccOtGveRX6JBVjy0KKrSIy91E9J_Ns8o6J32P4_YOdKpPiJ_enZFmmZqowHL255Hhe5cERBcR5YnvExUGzFUJXhelI0_UyoCpVFKCKQ42YNibAs946WdOChkFRHHtrVgmc/s200/img_6897.jpg)
#define QTD_LEDS 6
#define portaChave 8
int porta[QTD_LEDS] = {2,3,4,5,6,7};
int pausa = 500;
void setup() {
for(int i = 0;i < QTD_LEDS; i++) {
pinMode(porta[i],OUTPUT);
}
pinMode(portaChave,INPUT);
}
void loop() {
if (digitalRead(portaChave) == HIGH) {
for(int i = 0;i < QTD_LEDS; i++) {
digitalWrite(porta[i], HIGH);
delay(pausa);
digitalWrite(porta[i], LOW);
}
} else {
for(int i = QTD_LEDS - 1;i >= 0; i--) {
digitalWrite(porta[i], HIGH);
delay(pausa);
digitalWrite(porta[i], LOW);
}
}
}
![Clique para ampliar](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9pJd4lT4xNfauEht7A2thyphenhyphenLjTGuegYjatAwdszgH0_MtlmwjxfNM1OP3L_cPK7DD3u88IjwkCoeHbaLxfDnQTVK9l_ptkmHcUcwtSHPzgGWOn_IEZxG0Kcw5Ra9D_cBi4KvNCHYbNmc4/s200/img_6896.jpg)
O video abaixo apresenta a execução do programa dentro do Arduino após compilar através da IDE na máquina desktop. Este video mostra os LEDs acendendo/apagando num sentido e após a mudança da posição da chave o sentido é invertido.
O próximo exemplo, que será apresentando num novo post, ilustrará uma evolução do código acima para receber um sinal analógico vindo de um potenciômetro para controlar o tempo que cada LED permanece aceso.