Social Icons

Piscando LED Sem delay()

Às vezes você precisa fazer piscar um Led (ou alguma outra função sensitiva de tempo) ao mesmo tempo que outra coisa (como observar o teclar de um botão por exemplo). Isso significa que você não pode usar a função delay, ou você pararia qualquer outro programa enquanto o Led pisca. Aqui segue um código que mostra como piscar um Led sem delay. O código mantém a informação da última vez que o Led ligou ou desligou. Assim, para cada loop ele checa se passou um intervalo de tempo suficiente; se passou tempo suficiente ele desliga o Led caso estivesse aceso, e vice-versa.





Código

int ledPin = 13;                // LED conectado na port digital 13
int value = LOW;                // ligado ou desligado? 
long previousMillis = 0;        //grava ultima posição (On/Off)
long interval = 1000;           // valor de intervalo em milisegundos

void setup()
{
  pinMode(ledPin, OUTPUT);      // sets the digital pin as output
}

void loop()
{
  // aqui você coloca o aódigo que irá rodar enquanto pisca o led
   // the interval at which we want to blink the LED.
  if (millis() - previousMillis > interval) {
    previousMillis = millis();   // remember the last time we blinked the LED

    // if the LED is off turn it on and vice-versa.
    if (value == LOW)
      value = HIGH;
    else
      value = LOW;

    digitalWrite(ledPin, value);
  }
}