There are some logical mistakes in Example 1 and Example 2 above.
But here is my very simple code that I've tasted:
// Example 3
#define dTimeStep 1000
#define pinDSysLED 13
unsigned long tSCNT = 0;
unsigned long tSTimeK0 = 0;
unsigned long tSTimeKN1 = 0;
void setup() {
pinMode (pinDSysLED, OUTPUT);
Serial.begin(9600);
}
void loop () {
tSTimeK0 = tSTimeKN1 = millis();
printNewline();
Serial.println("Task Manager starts... ");
Serial.print("At tSCNT = ");
Serial.print(tSCNT);
Serial.print(" time is ");
Serial.print(tSTimeK0);
Serial.println(" ms.");
while(true) {
tSTimeK0 = millis();
if(tSTimeK0 < tSTimeKN1) tSTimeKN1 = 0;
if(tSTimeK0 - tSTimeKN1 >= dTimeStep) {
digitalWrite(pinDSysLED, HIGH);
tSCNT++;
Serial.print("At tSCNT = ");
Serial.print(tSCNT);
Serial.print(" time is ");
Serial.print(tSTimeK0);
Serial.println(" ms.");
tSTimeKN1 = tSTimeK0;
digitalWrite(pinDSysLED, LOW);
}
}
}
And this is the output:
Task Manager starts...
At tSCNT = 0 time is 0 ms.
At tSCNT = 1 time is 1000 ms. // time step is 1000 ms – OK!
At tSCNT = 2 time is 2000 ms.
At tSCNT = 3 time is 3000 ms.
At tSCNT = 108 time is 108000 ms.
At tSCNT = 109 time is 109000 ms.
At tSCNT = 110 time is 110000 ms.
At tSCNT = 111 time is 111148 ms. < - - - !?!? // time step is 1148 ms
At tSCNT = 112 time is 110920 ms. < - - - !?!? // time step is MINUS 228 ms and the time is wrong
At tSCNT = 113 time is 111920 ms. // and again the time step is 1000 ms but the time is wrong
At tSCNT = 114 time is 112920 ms.
At tSCNT = 420 time is 418920 ms.
At tSCNT = 421 time is 419920 ms.
At tSCNT = 422 time is 420920 ms.
At tSCNT = 423 time is 422050 ms. < - - - !?!?
At tSCNT = 424 time is 421823 ms. < - - - !?!?
At tSCNT = 425 time is 422823 ms.
At tSCNT = 426 time is 423823 ms.
At tSCNT = 427 time is 424823 ms.
At tSCNT = 428 time is 425823 ms.
At tSCNT = 429 time is 426823 ms.
At tSCNT = 430 time is 427823 ms.
At tSCNT = 431 time is 428823 ms.
At tSCNT = 432 time is 429824 ms. < - - - !?!?
At tSCNT = 433 time is 430824 ms.
At tSCNT = 434 time is 431824 ms.
At tSCNT = 569 time is 566824 ms.
At tSCNT = 570 time is 567824 ms.
At tSCNT = 571 time is 568824 ms.
At tSCNT = 572 time is 569900 ms. < - - - !?!?
At tSCNT = 573 time is 569672 ms. < - - - !?!?
At tSCNT = 574 time is 570672 ms.
At tSCNT = 575 time is 571672 ms.
At tSCNT = 866 time is 862672 ms.
At tSCNT = 867 time is 863672 ms.
At tSCNT = 868 time is 864672 ms.
At tSCNT = 869 time is 865860 ms. < - - - !?!?
At tSCNT = 870 time is 865633 ms. < - - - !?!?
At tSCNT = 871 time is 866633 ms.
At tSCNT = 872 time is 867633 ms.
At tSCNT = 1209 time is 1204633 ms.
At tSCNT = 1210 time is 1205633 ms.
At tSCNT = 1211 time is 1206633 ms.
At tSCNT = 1212 time is 1207696 ms. < - - - !?!?
At tSCNT = 1213 time is 1207471 ms. < - - - !?!?
At tSCNT = 1214 time is 1208471 ms.
At tSCNT = 1215 time is 1209472 ms. < - - - !?!?
At tSCNT = 1216 time is 1210472 ms.
At tSCNT = 1217 time is 1211472 ms.
At tSCNT = 1427 time is 1421472 ms.
At tSCNT = 1428 time is 1422472 ms.
At tSCNT = 1429 time is 1423472 ms.
At tSCNT = 1430 time is 1424489 ms. < - - - !?!?
At tSCNT = 1431 time is 1424264 ms. < - - - !?!?
At tSCNT = 1432 time is 1425264 ms.
At tSCNT = 1433 time is 1426264 ms.
At tSCNT = 2152 time is 2145264 ms.
At tSCNT = 2153 time is 2146264 ms.
At tSCNT = 2154 time is 2147264 ms.
At tSCNT = 2155 time is 2214591 ms. < - - - !?!?
At tSCNT = 2156 time is 2147519 ms. < - - - !?!?
At tSCNT = 2157 time is 2148519 ms.
At tSCNT = 2158 time is 2149519 ms.
At tSCNT = 2159 time is 2150519 ms.
At tSCNT = 2160 time is 2151519 ms.
At tSCNT = 2161 time is 2152519 ms.
At tSCNT = 2162 time is 2153519 ms.
At tSCNT = 2163 time is 2154519 ms.
At tSCNT = 2164 time is 2155520 ms. < - - - !?!?
At tSCNT = 2165 time is 2156520 ms.
At tSCNT = 2166 time is 2157520 ms.
At tSCNT = 2208 time is 2199520 ms.
At tSCNT = 2209 time is 2200520 ms.
At tSCNT = 2210 time is 2201520 ms.
At tSCNT = 2211 time is 2202532 ms. < - - - !?!?
At tSCNT = 2212 time is 2202307 ms. < - - - !?!?
At tSCNT = 2213 time is 2203307 ms.
At tSCNT = 2214 time is 2204307 ms.
At tSCNT = 3557 time is 3547307 ms.
At tSCNT = 3558 time is 3548307 ms.
At tSCNT = 3559 time is 3549307 ms.
At tSCNT = 3560 time is 3550477 ms. < - - - !?!?
At tSCNT = 3561 time is 3550252 ms. < - - - !?!?
At tSCNT = 3562 time is 3551252 ms.
At tSCNT = 3563 time is 3552252 ms.
At tSCNT = 3629 time is 3618252 ms.
At tSCNT = 3630 time is 3619252 ms.
Etc
If we look tSCNT after 1 hour the time error is +30 seconds.
If we look time in [ms] after 1 hour the time error is +19 seconds.