define EVERY_MS(x) \ static uint32_t tmr;\ bool flag = millis() - tmr >= (x);\ if (flag) tmr = millis();\ if (flag)
Данный макрос заменяет “таймер на миллис” одной строчкой, без использования библиотек и создания классов! Пользоваться очень просто:
EVERY_MS(100) { // ... // данный код будет выполняться каждые 100 мс}
Единственное ограничение: нельзя вызывать макрос больше одного раза в одном и том же блоке кода, это приведёт к ошибке =) То есть вот так нельзя:
void loop() { EVERY_MS(100) { // ваш код } EVERY_MS(500) { // ваш код }}
Если очень нужна такая конструкция – помещаем каждый вызов в свой блок кода:
void loop() { { EVERY_MS(100) { // ваш код } } { EVERY_MS(500) { // ваш код } } }
Либо используем блоки кода по условиям или как функцию:
void loop() { if (someCondition) { EVERY_MS(100) { // ваш код } } myAction();}void myAction() { EVERY_MS(500) { // ваш код }}
У – удобно!