// ############################################################################
// Таймер потока 01
uint8_t avrTthread01(uint16_t span) {
static uint32_t future = 0;
if (millis() < future) return 0;
future += span;
return 1;
}
// ############################################################################
// Таймер потока 02
uint8_t avrTthread02(uint16_t span) {
static uint32_t future = 0;
if (millis() < future) return 0;
future += span;
return 1;
}
// ############################################################################
// Таймер потока 03
uint8_t avrTthread03(uint16_t span) {
static uint32_t future = 0;
if (millis() < future) return 0;
future += span;
return 1;
}
// ############################################################################
// SETUP
void setup() {
Serial.begin(115200);
}
// ############################################################################
// LOOP
void loop() {
// вызывается раз в 0.5сек
if (avrTthread01(500)) {
Serial.print(F("thread 500 "));
Serial.println();
}
// вызывается раз в 0.2сек
if (avrTthread02(200)) {
Serial.print(F("thread 200 "));
Serial.println();
}
// вызывается раз в 0.1сек
if (avrTthread03(100)) {
Serial.print(F("thread 100 "));
Serial.println();
}
}
На выходе:
21:43:37.428 -> thread 100
21:43:37.570 -> thread 200
21:43:37.570 -> thread 100 // t100 = 142ms (???)
21:43:37.570 -> thread 500
21:43:37.665 -> thread 100 // t100 = 95ms
21:43:37.762 -> thread 200 // t200 = 192ms
21:43:37.762 -> thread 100 // t100 = 97ms
21:43:37.857 -> thread 100 // t100 = 95ms
21:43:37.951 -> thread 200 // t200 = 189ms
21:43:37.951 -> thread 100 // t100 = 94ms
21:43:38.047 -> thread 500 // t500 = 477ms