// Task 1: Clock System and CPU Timing
// Pin assignments
const int ledDelayPin = 8; // LED using delay()
const int ledMillisPin = 9; // LED using millis()
// Variables for millis() timing
unsigned long previousMillis = 0;
const long interval = 1000; // 1 second
void setup() {
pinMode(ledDelayPin, OUTPUT);
pinMode(ledMillisPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
// -------------------------------
// 1️⃣ Blocking LED using delay()
// -------------------------------
digitalWrite(ledDelayPin, HIGH);
delay(1000); // blocks CPU for 1 second
digitalWrite(ledDelayPin, LOW);
delay(1000);
// -------------------------------
// 2️⃣ Non-blocking LED using millis()
// -------------------------------
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
digitalWrite(ledMillisPin, !digitalRead(ledMillisPin)); // toggle LED
}
// -------------------------------
// 3️⃣ Measure elapsed time with micros()
// -------------------------------
static unsigned long lastToggleTime = micros();
unsigned long now = micros();
unsigned long elapsed = now - lastToggleTime;
// Print every 2 seconds
if (elapsed > 2000000) { // 2,000,000 µs = 2 sec
Serial.print("Elapsed microseconds: ");
Serial.println(elapsed);
lastToggleTime = now;
}
}