LEDs a picar em simultâneo

Muitas vezes não é prático ou desejável usar a funcção delay() para controlar o tempo de por exemplo LEDs a piscar, pois afecta o funcionamento do restante programa que pode ter outras funções que não podem parar. Para isso usa-se a função millis() em conjunto com alguma lógica para decidir com base no tempo decorrido se activa ou não os LEDs. Nota: no video apenas se vêm configurados 3 LEDs para piscar com 0,5, 1 e 2 segundos.

 

Video

 

Sketch

/*
 * 3 LEDs a piscar com frenquencias diferentes
 *
 * Este sketch mostra como e possivel ter LEDs a piscar sem
 * recurso da funcao delay(). Util também para ir buscar informacao
 * em multiplos sensores de x em x tempo.
 *
 * 20101122 Luis Sismeiro
 */

/* Pins dos LEDs */
byte ledPin1 = 9;
byte ledPin2 = 10;
byte ledPin3 = 11;

/* Inicializacao */
long int timeBefore1 = 0;
long int timeBefore2 = 0;
long int timeBefore3 = 0;

/* Tempo de ON e OFF dos LEDs */
int delay1 = 500;
int delay2 = 1000;
int delay3 = 2000;

/* LEDs apagados inicialmente */
int ledStatus1 = LOW;
int ledStatus2 = LOW;
int ledStatus3 = LOW;

void setup() {
 pinMode(ledPin1, OUTPUT);
 pinMode(ledPin2, OUTPUT);
 pinMode(ledPin3, OUTPUT);
}

void loop() {

/* LED 1 */ 
if (millis() - timeBefore1 > delay1) {
 if (ledStatus1 == HIGH)
 ledStatus1 = LOW;
 else
 ledStatus1 = HIGH;
 digitalWrite(ledPin1, ledStatus1);
 timeBefore1 = millis();
 }

/* LED 2 */
if (millis() - timeBefore2 > delay2) {
 if (ledStatus2 == HIGH)
 ledStatus2 = LOW;
 else
 ledStatus2 = HIGH;
 digitalWrite(ledPin2, ledStatus2);
 timeBefore2 = millis();
 }

/* LED 3 */ 
if (millis() - timeBefore3 > delay3) {
 if (ledStatus3 == HIGH)
 ledStatus3 = LOW;
 else
 ledStatus3 = HIGH;
 digitalWrite(ledPin3, ledStatus3);
 timeBefore3 = millis();
 }
}

Etiquetas: ,

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s


%d bloggers like this: