Led parpadeante sin delay y diferente On y Off

Para quienes les pueda ser de utilidad:

Funciona como "Blink sin delay" permitiendo que otro código pueda ser ejecutado al mismo tiempo que se hace parpadear un led, pero a diferencia de éste permite seleccionar los intervalos de encendido y apagado diferentes.

Slds.

/*

  • Led parpadeante sin utilizar delay()
  • y con diferente intervalo de encendido y apagado
  • Basado en "BlinkWithoutDelay" (http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay)
  • Permite que otro código pueda ser ejecutado al mismo tiempo sin ser interrumpido
  • por el código que hace parpadear el led. Permite además seleccionar un intervalo
  • de encendido diferente al de apagado.
  • Abril 05, 2009
  • Bogotá
  • Alejandro Tamayo // www.thepopshop.org // laimagendelmundo@yahoo.ca
  • Como funciona:
  • Verifica si está dentro de un nuevo periodo de encendido y apagado (On + Off)
  • y si lo está (flag = true) verifica si ha pasado el tiempo de encendio y apaga el led,
  • de lo contrario lo mantiene encendido.

*/

int ledPin = 13;
boolean flag = true;
long previousMillis = 0;
long On = 50; // tiempo que dura encendido, en milisegundos
long Off = 1000; // tiempo que dura apagado, en milisegundos

void setup(){
pinMode(ledPin, OUTPUT);
}

void loop(){

// aquí es donde puede colocarse otro código que necesita ser ejecutado continuamente

if (millis() < (previousMillis + On + Off)){
flag = true;
}
else {
flag = false;
previousMillis = millis();
}
if (flag == true){
if (millis() > (previousMillis + On)){
digitalWrite(ledPin, LOW);
}
else{
digitalWrite(ledPin, HIGH);
}
}
}