Blocking Code using delay()
POT_PIN
500
BTN_PIN
ESP32
RED_LED
GRN_LED
1void setup() {
2 pinMode(RED_LED, OUTPUT);
3 pinMode(GRN_LED, OUTPUT);
4 pinMode(BTN_PIN, INPUT);
5}
6
7void loop() {
8 int btn = digitalRead(BTN_PIN);
9 digitalWrite(GRN_LED, btn); // Shows responsiveness
10
11 int delayTime = analogRead(POT_PIN);
12 digitalWrite(RED_LED, HIGH);
13 delay(delayTime); /* Execution FREEZES here */
14 digitalWrite(RED_LED, LOW);
15 delay(delayTime); /* Execution FREEZES here */
16}
Non-Blocking Code using millis()
POT_PIN
500
BTN_PIN
ESP32
RED_LED
GRN_LED
1void setup() {
2 pinMode(RED_LED, OUTPUT);
3 pinMode(GRN_LED, OUTPUT);
4 pinMode(BTN_PIN, INPUT);
5}
6
7void loop() {
8 int btn = digitalRead(BTN_PIN);
9 digitalWrite(GRN_LED, btn); // Instantly updates!
10
11 int interval = analogRead(POT_PIN);
12 unsigned long currMs = millis();
13 if (currMs - prevMs >= interval) {
14 prevMs = currMs;
15 ledState = !ledState;
16 digitalWrite(RED_LED, ledState);
17 } // Never stops looping
18}