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.
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);
}
}