Beh se vuoi svincolarti dal delay() e poter fare "altre cose" mentre attendi il tempo di spegnimento del LED, puoi fare una cosa del genere:
unsigned long tStart;
#define LED 3 // Pin del LED
#define ON_TIME 2000 // millisecondi di accensione del LED
void setup() {
Serial.begin(9600);
pinMode(LED, OUTPUT);
digitalWrite(LED, HIGH);
tStart = millis();
}
void loop() {
if ( millis()-tStart >= ON_TIME ) {
digitalWrite(LED, LOW);
}
// Qui fai altre cose...
}