Найти в Дзене
ВА - Электроника

⏱ Задержки в Ардуино / Функции времени в Ардуино

Оглавление

👋Всем привет! Добро пожаловать в рубрику "Обучающие статьи" на наше канале. Сегодня мы будем обучатся задержкам в Ардуино, разберём несколько способов задержки в Ардуино и ещё один необычный способ.

🔴delay(time);

Самый известный и простой способ задержки - delay. Такой способ задержки подходит не для всех задач, например когда нужно опрашивать кнопку и одновременно мигать светодиодом. Но delay подходит для простых задач, как мигание светодиодом. Использование в программе очень простое:

void setup () {
}
void loop () {
//Выполняем действие
delay(time); // Задержка
}

Где time - время в миллисекундах (1 секунда - 1000 миллисекунд).

Но если в программе много задержек, где нужно одинаковое значение (Например мигание светодиодом), то можно использовать:

#define time_delay 1000 //Настройка времени
void setup () {
}
void loop () {
//Выполняем действие
delay(time_delay); // Задержка
//Выполняем действие
delay(time_delay); // Задержка
........
}

Где #define time_delay настройка времени в указных местах time_delay.

👉И так сделаем небольшой итог по delay ☝Он подходит для простых задач, например мигание светодиодом. ✌Легко настраивается в программе.

🟠millis();

И так мы выяснили, что delay подходит для простых задач, но что же делать с многозадачностью? Для нескольких задач (многозадачности) нам подойдёт millis(). Он настраивается немного сложнее чем delay, но понять можно:

#define time_millis 500 //Настройка времени
uint32_t tmr1; //Переменная таймера
void setup() {
}
void loop() {
if (millis() - tmr1 >= time_millis) { //Ищем разницу
tmr1 = millis(); //Сбрасываем таймер
//Выполняем действие
}
}

Логика работы millis() очень простая:

1.Заводим переменную таймера uint32_t tmr1;

2.Ищем разницу между текущим временем программы и переменной таймера

3.Если разница больше необходимого периода, то выполняем нужное действие и сбрасываем таймер.

Если нужно несколько таймеров, то:

//Переменные таймеров
uint32_t Timer_millis1, Timer_millis2, Timer_millis3 ....... ;
void setup() {
}
void loop() {
if (millis() - Timer_millis1 >= 500) { //Таймер 500 мс
Timer_millis1 = millis(); //Сброс таймера
//Выполняем действие 1
}
if (millis() - Timer_millis2 >= 300) { //Таймер 300 мс
Timer_millis2 = millis(); //Сброс таймера
//Выполняем действие 2
}
if (millis() - Timer_millis3 >= 100) { //Таймер 100 мс
Timer_millis3 = millis(); //Сброс таймера
//Выполняем действие 3
}
..................
}

👉Итог по millis(); ☝Настраивается немного сложнее delay. ✌Подходит для многозадачности

🟡*Нестандартно*

А сейчас немного нестандартных задержек в Ардуино от автора канала. Смысл этой задержки в том, что мы делаем много маленьких задержек и выполняем действие:

#define time_delay 1000 //Настройка времени
void setup () {
}
void serial() { //Выполняем действие тут
}
void loop () {
for (int count = 0; count < time_delay; count++) { // Задержка
delay(1);
serial();
}
}

👉Да, нестандартно, много костылей, но работает!

😎Итак, сегодня мы познакомились с несколькими способами задержек в Ардуино, но это не все задержки, есть ещё много способов задержек в Ардуино.

👉Если у вас есть предложения какую следующую обучающею статью выпустить на этот канал, то пишите в комментариях.

А если вы до сих пор не знаете что такое Ардуино, то советуем прочитать нашу статью:

А если думаете "Какой-бы проект сделать на Ардуино", то подписывайтесь на наш канал в Дзене:

Вася Электроника | Дзен

и Telegram канал

Вася Электроника

Всего Хорошего!

🙄*И еще последний нестандартный способ задержки реализован в одном нашем проекте, скачать прошивку и посмотреть как реализована задержка можно по ссылке https://dzen.ru/a/Zan0wYZO-w7JM5Bg