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.

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()".


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()".

#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);
}
}
}

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.