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