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