const int ledDelay = 8;
const int ledMillis = 9;
unsigned long previousMillis = 0;
const long interval = 1000;
void setup() {
pinMode(ledDelay, OUTPUT);
pinMode(ledMillis, OUTPUT);
Serial.begin(9600);
}
void loop() {
// Blocking LED using delay()
digitalWrite(ledDelay, HIGH);
delay(1000);
digitalWrite(ledDelay, LOW);
delay(1000);
// Non-blocking LED using millis()
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
digitalWrite(ledMillis, !digitalRead(ledMillis));
}
// Measure time between toggles using micros()
static unsigned long lastToggleMicros = 0;
static bool toggleState = false;
if (currentMillis % 2000 < 10) { // every ~2s
unsigned long nowMicros = micros();
unsigned long elapsed = nowMicros - lastToggleMicros;
lastToggleMicros = nowMicros;
toggleState = !toggleState;
digitalWrite(ledMillis, toggleState);
Serial.print("Elapsed time (µs): ");
Serial.println(elapsed);
}
}
/*
const int ledMillis = 9;
unsigned long previousMillis = 0;
const long interval = 1000;
void setup() {
pinMode(ledMillis, OUTPUT);
Serial.begin(9600);
}
void loop() {
unsigned long currentMillis = millis();
unsigned long difference = currentMillis - previousMillis;
// Print timing values
Serial.print("Current millis: ");
Serial.print(currentMillis);
Serial.print(" | Previous millis: ");
Serial.print(previousMillis);
Serial.print(" | Difference: ");
Serial.println(difference);
// Non-blocking LED toggle
if (difference >= interval) {
previousMillis = currentMillis;
digitalWrite(ledMillis, !digitalRead(ledMillis));
}
// Small delay to avoid flooding Serial Monitor
delay(200);
}
*/