Pisca-pisca sem delay

Há vezes em que você precisa fazer um LED piscar (ou outra função dependente de temporização) ao mesmo tempo em que outra coisa acontece (tal como observar o estado de um interruptor). Isto significa que não se pode usar delay(), senão todo o restante do programa fica paralizado enquanto o LED pisca. Abaixo está um código que demonstra como é possível piscar o LED sem o uso da função delay(). O que o programa faz é observar quando foi a última vez que o LED foi ligado ou desligado e assim, a cada ciclo do loop(), averiguar se passou o devido tempo. Se tiver passado, o LED é ligado caso esteja desligado e vice-versa.

Código


int ledPin = 13;                // LED conectado ao pino digital 13
int value = LOW;                // último valor do LED
long previousMillis = 0;        // último momento que o LED foi atualizado
long interval = 1000;           // tempo de transição entre estados (milisegundos)

void setup()
{
  pinMode(ledPin, OUTPUT);      // configura o pino digital como saída
}

void loop()
{
  // COLOQUE AQUI o código que precisa rodar todo o tempo

  // veja se é a hora de atualizar o LED; isto é, a diferença
  // entre o tempo atual e o último tempo que piscamos o LED é
  // maior que o tempo de transição entre estados?
  if (millis() - previousMillis > interval) {
    previousMillis = millis();   // lembre-se do último tempo que piscamos o LED

    // se o LED está apagado, acenda-o e vice-versa.
    if (value == LOW)
      value = HIGH;
    else
      value = LOW;

    digitalWrite(ledPin, value);
  }
}


Share