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.
2 comentários:
Muito legal e instrutivo o seu blog Spock, quanto mais pessoas conhecerem o Arduino, mais se ampliam as possibilidades de que cada um possa customizar o seu ambiente e criar controladores para aumentar a sua qualidade de vida . Vida Longa e Prosperidade para voce.
Jeronimo
www.blogdoje.com.br
AVR, Arduino & ARM
Spock parabens pela iniciativa, o Arduino é realmente apaixonante.
Só um comentário, o ATMEGA suporta 40mA por pino, o LED ligado com um resistor de 10K vai receber menos de 5mA.
Abraços,
Rudy
Postar um comentário