Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --- original_loop.ino
- +++ modified_loop.ino
- @@ -1,3 +1,9 @@
- +// Moved static variables to global scope for clarity
- +unsigned long lastAPUpdate = 0;
- +int apAnimFrame = 0;
- +unsigned long lastSyncAnim = 0;
- +int syncAnimFrame = 0;
- +
- void loop() {
- // Handle scheduled reboot early
- if (shouldReboot) {
- @@ -7,7 +13,12 @@
- dnsServer.stop();
- Serial.print("[DNS] Server stopped拉到這裡不支援的語言:dnsServer.stop();
- Serial.print("[DNS] Server stopped:");
- - }
- - delay(2000);
- + }
- + // Replace delay with non-blocking wait
- + static unsigned long rebootStart = 0;
- + if (rebootStart == 0) rebootStart = millis();
- + if (millis() - rebootStart >= 2000) {
- + rebootStart = 0; // Reset for next reboot
- Serial.println("[SYSTEM] Rebooting now.");
- ESP.restart();
- }
- @@ -13,13 +20,12 @@
- dnsServer.processNextRequest();
- - static unsigned long lastUpdate = 0;
- - static int animFrame = 0;
- unsigned long now = millis();
- - if (now - lastUpdate > 750) {
- - lastUpdate = now;
- + if (now - lastAPUpdate >= 750) {
- + lastAPUpdate = now;
- P.setTextAlignment(PA_CENTER);
- - switch (animFrame % 3) {
- + switch (apAnimFrame % 3) {
- case 0: P.print("AP©"); break;
- case 1: P.print("APª"); break;
- case 2: P.print("AP«"); break;
- }
- - animFrame++;
- + apAnimFrame++;
- }
- - delay(10);
- + yield(); // Ensure responsiveness
- return;
- }
- @@ -62,14 +68,15 @@
- Serial.println("[DISPLAY] Waiting for NTP sync...");
- unsigned long start = millis();
- - static int syncAnimFrame = 0;
- -
- - while (millis() - start < clockDuration) {
- + // Replace while with non-blocking check
- + if (millis() - start >= clockDuration) break;
- + if (millis() - lastSyncAnim >= 750) {
- P.setTextAlignment(PA_CENTER);
- - switch (syncAnimFrame % 3) {
- + switch (syncAnimFrame % 3) {
- case 0: P.print("sync®"); break;
- case 1: P.print("sync¯ 什麼是NTP?NTP是Network Time Protocol的縮寫,用於同步計算機和網絡設備的時鐘。
- case 2: P.print("sync°"); break;
- }
- syncAnimFrame++;
- - delay(750);
- yield();
- + lastSyncAnim = millis();
- }
- } else {
- const char* day = daysOfTheWeek[timeClient.getDay()];
- int hour = timeClient.getHours();
- int minute = timeClient.getMinutes();
- Serial.printf("[DISPLAY] First boot clock: %s %02d:%02d\n", day, hour, minute);
- unsigned long start = millis();
- - while (millis() - start < clockDuration) {
- + // Replace while with non-blocking check
- + if (millis() - start >= clockDuration) break;
- + static unsigned long lastBlink = 0;
- + if (millis() - lastBlink >= 750) {
- if ((millis() / 750) % 2 == 0)
- P.printf("%.3s%02d;%02d", day, hour, minute);
- else
- P.printf("%.3s%02d:%02d", day, hour, minute);
- - delay(50);
- + lastBlink = millis();
- yield();
- }
- }
- @@ -99,14 +108,15 @@
- Serial.println("[DISPLAY] Waiting for NTP sync...");
- unsigned long start = millis();
- - static int syncAnimFrame = 0;
- -
- - while (millis() - start < clockDuration) {
- + // Replace while with non-blocking check
- + if (millis() - start >= clockDuration) break;
- + if (millis() - lastSyncAnim >= 750) {
- P.setTextAlignment(PA_CENTER);
- - switch (syncAnimFrame % 3) {
- + switch (syncAnimFrame % 3) {
- case 0: P.print("sync®"); break;
- case 1: P.print("sync¯"); break;
- case 2: P.print("sync°"); break;
- }
- syncAnimFrame++;
- - delay(750);
- + lastSyncAnim = millis();
- yield();
- }
- } else {
- const char* day = daysOfTheWeek[timeClient.getDay()];
- int hour = timeClient.getHours();
- int minute = timeClient.getMinutes();
- Serial.printf("[DISPLAY] Clock: %s %02d:%02d\n", day, hour, minute);
- unsigned long start = millis();
- - while (millis() - start < clockDuration) {
- + // Replace while with non-blocking check
- + if (millis() - start >= clockDuration) break;
- + static unsigned long lastBlink = 0;
- + if (millis() - lastBlink >= 750) {
- if ((millis() / 750) % 2 == 0)
- P.printf("%.3s%02d;%02d", day, hour, minute);
- else
- P.printf("%.3s%02d:%02d", day, hour, minute);
- - delay(50);
- + lastBlink = millis();
- yield();
- }
- }
- } else if (displayMode == 1) {
- if (!displayed) {
- Serial.println("[DISPLAY] Showing weather info...");
- String msg = currentTemp;
- Serial.printf("[WEATHER] Display message: %s\n", msg.c_str());
- P.displayClear();
- P.setTextAlignment(PA_CENTER);
- P.printf(msg.c_str());
- displayed = true;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement