Найти в Дзене

Макрос для таймера на Arduino

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) { // ваш код }}

У – удобно!