Уроки Arduino #4 - функции времени

preview_player
Показать описание
В этом уроке мы с вами научимся пользоваться временнЫми функциями Arduino, или функциями времени. Это стандартные функции задержек delay() и delayMicroseconds(), а также встроенный таймер millis() и micros(). Рассмотрим особенности и примеры применения.

▼ Текстовая версия ▼
▼ Огромный стартовый набор GyverKIT ▼
▼ Уроки Arduino на сайте ▼
▼ Модули и датчики с Али ▼
▼ Страница "Заметок Ардуинщика" ▼

Теги: #arduino #уроки #ардуино #alexgyver
●●●●●●●●●●●●●●●●●●●●
Рекомендации по теме
Комментарии
Автор

Хорошее видео.
Замечу лишь, что кормить животных раз в 23 дня чересчур расточительно)

pilipshanov
Автор

2:17
Прошу заметить, что
выражение: if(millis() - last_time > 5000){}
Срабатывает на 1 миллисекунду позже указанного, поэтому правильнее ставить ">="

ClydeSimonSound
Автор

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

sergeyv
Автор

Качество уроков на высоте, приятно слушать и не засыпаешь, вот только без практики это всё забудется

habihabi
Автор

очень хорошо объясняете! пишите примеры, хорошо подготавливаетесь, прям сразу хочется все это слушать! Все записываю в блокнот, от души спасибо! :)

cycle
Автор

Спасибо большое . Я не программист но Ваш урок мне очень помог создать скетч для управления пиролизным котлом.

АлександрЛюбарчук
Автор

Хорошо бы рассказать про таймер, в видео показана циклическое выполнение действия. А хотелось бы послушать про таймер - запуск таймера по событию, событие по окончанию работы таймера.

mikdandys
Автор

if (millis() - last_time > 5000) {
// что-то сделать
last_time = millis();
}
На 51-ом дне работы программы, значение, возвращающее функцией millis() переполнится, last_time будет иметь значение "за 5 секунд до переполнения" и блок if выполнится один раз только через 50 дней, перезаписав last_time на значение чуть больше, и так по кругу.
Т.к. в нашем случае значение разности не будет превышать 5000 мсек, то проблему можно решить взяв разность по модулю (функция labs() для типа long):
if (labs(millis() - last_time) > 5000) {...}
Но в таком случае будет ложное срабатывание при каждом переполнении. Лучше сделать так:
unsigned long nextTime = 0;
void loop() {
if (nextTime <= millis()) {
nextTime = millis() + 5000;
}
}
Переменная nextTime хранит в себе время следующего "срабатывания". таким образом не нужно думать о переполнении.

WakeUpLfe
Автор

мне кажется последний однострочный вариант содержит несколько ошибок.
1. для приведение к секундам выполняется деление на 100 (хотя голосом все правильно сказал - делить надо на 1000).
2. из-за округления код срабатывает гораздо чаще чем нужно. например если millis() вернет 6405 или 6425 после округления получится одно и то же - в результате несколько запусков в одном интервале

tenacious_nomad
Автор

Спасибо большое за информацию. Практически все легко и приятно глазу. Я раньше только знал как папку создать а сейчас чуть больше чем ранее 🤗

Scallori_
Автор

Спасибо!!! И как всегда что то новенькое, там где казалось и так все понятно. У тебя талант всякие вкусности выдавать!!!

АлександрВишняков-ги
Автор

Спасибо, жду видео с уходом дуины в спящий режим)

victorgoncharov
Автор

Очень полезное видео! спасибо за труды!!!

TheFenix
Автор

Это великолепнейший цикл уроков. Теперь он всегда у меня в закладках. Все время чего нибудь да забуду. Спасибо тебе за все. А можно в тебя денюжкой что-ли кинуть, чтобы можно было с уверенностью ждать новых выпусков (на обоих каналах(но хотелось бы побольше обучалок по ардуино ))

unitycreate
Автор

2:50 не нужно ли переменной last_time присвоить изначально значение? так как при первом запуске if last_time будет использовать неизвестное значение из памяти предположительно 0 но все же. или я что-то не так понял?

theavgusto
Автор

Спасибо вам за столь полезные видео!!!

РоманАлександрович-бр
Автор

Спс большое за уроки. Только побольше бы:) Самые понятные уроки из тех что я видел.

АндрейКирюхин-жд
Автор

Хороший видео урок! Возможно, для новичков, стоило указать, что если мы не присваиваем переменной число, то в ней, как правило, по умолчанию хранится 0. Таким образом last_time, в начале, хранит 0, а по достижении millis() 5000 перезаписывается на 5000 и т.д.

ИгорьМягков-гв
Автор

Если при компиляции скетча с последним примером вылетает ошибка: "invalid operands of types 'double' and 'int' to binary 'operator%" можно записать так: "if (int (round(millis() / 300)) % 2 == 0)"
PS Огромное Спасибо за уроки!!!

ivanshepelev
Автор

побыстрее бы следующие видео, очень понравилось

florinturcanu