void setup() {
Serial.begin(115200);
uint32_t a;
uint32_t b;
delay(random(100));
a = millis();
delay(random(100)+10);
b = millis();
Serial.println ("Что более чем на 10 больше?");
Serial.print(a);
Serial.print(" или ");
Serial.println(b);
Serial.print(a);
Serial.print("? ");
Serial.println(b - a > 10 ? "Yee!": "Oops!");
Serial.print(b);
Serial.print("? ");
Serial.println(a - b > 10 ? "Yee!": "Oops!");
}
void loop() {
}
Наслаждаемся!
Следствия таких ошибок ОЧЕНЬ трудно заметить. Так как ни на первый ни на второй взгляд в коде нет нарушений логики. И тип для таймеров - правильный и условия - тоже… “выглядят” правильно.
Рекомендую добавить куда-то, возможно в Вики, примеры типичных ошибок. Вот таких, или операцию сложения с миллис и аналогичное. А то мы много лет приводим курьёзы на форуме, но новичок не поймет вымученный пример! Только совсем живой, реальный пример!
Суть в неаккуратной работе с беззнаковыми числами.
Но в отличие от известного всем примера с переполнением millis() результат можно наблюдать раньше, чем через 49 дней.
Из меньшего вычитается большее, но результат в минус не уходит, т.к. операнды безззнаковые. Соответственно - сравнение даёт противоположный ожидаемому результат.