LF: гибкий планировщик/библиотека таймеров
Я работаю над несколькими проектами arduino, где мне нужна гибкая библиотека планировщика и/или таймера, и мне было интересно, есть ли у кого-нибудь библиотека, которую они рекомендуют?
Случай 1: У меня есть датчик, который должен собирать наблюдения каждый час, но у него есть определенная последовательность измерений:
- Включение/загрузка (занимает около 15 секунд)
- Разминка в течение 60 секунд.
- Наблюдайте (2 мин), собирайте необработанные данные, генерируйте статистику.
- Остудить в течение 5 минут.
- Выключение питания
В этом случае имеется один микроконтроллер, действующий как регистратор данных, который управляет несколькими датчиками и записывает их на SD-карту.
Случай 2: У меня есть печь, которая должна управляться в соответствии с заданным пользователем температурным профилем (скажем, до 6 точек изменения), т. Е.
- Включить обогреватель
- Установите температуру 100С и удерживайте в течение 2 минут.
- Установите температуру 160С и подержите 15 минут.
- Установите температуру 250С и удерживайте в течение 1 часа.
- ....
- Установите температуру 100С и удерживайте в течение 1 часа.
- Выключите нагреватель
Я знаком с неблокирующими таймерами и (в прошлом) собрал несколько простых таймеров с помощью millis() и некоторых переменных ulong. Увы, сложность и время отладки быстро растут вместе с количеством зависимых таймеров. Прежде чем я сяду и набросаю определение класса, я решил спросить, что используют другие.
@Fred, 👍0
Обсуждение1 ответ
Некоторые библиотеки, которые я нахожу хорошими (основанными на мнениях):
- TaskManagerIO: https://github.com/davetcc/TaskManagerIO
- хорошо справляется с управлением событиями / планированием событий на определенное (системное) время или даже многократно.
- при этом вы можете, например, использовать
API scheduleFixedRate()
для вызова функции каждые 60 минут. Затем запускает питание (я предполагаю асинхронно, установив pin или что-то в этом роде) и просто запускает планировщик спомощью API scheduleOnce()
для вызова другой функции через 15 секунд. Затем эта целевая функция запускает прогрев и планирует следующую функцию / шаг на 60 секунд в будущем и так далее. Это выражало бы поток очень естественно.
- Если требуется точное хронометражирование, чтобы это было действительно каждый час, вы можете использовать внешний модуль RTC. Также зависит от используемого вами микроконтроллера, у многих есть встроенный, который вы можете питать кристаллом 32,768 кГц, и поэтому вам не нужен внешний чип
- библиотека для DS3231 / DS3232 RTC позволяет установить сигнал тревоги в RTC: https://github.com/JChristensen/DS3232RTC/blob/master/alarm-primer.md
- с его помощью вы можете, например, установить будильник на каждые 60 минут, а затем выполнить свою задачу.
- TCCR1A и TCCR2A на Леонардо
- Программирование Arduino Uno R3 для срабатывания реле каждые 24 часа
- Библиотека LiquidCrystal и таймеры кажутся несовместимыми.
- Использование классов таймеров внутри классов
- Библиотека Arduino Timer 1 управляет значением таймера
- TimerOne висит
- Как получить исходные файлы для библиотек Arduino?
- Использование millis() и micros() внутри процедуры прерывания
Вы можете использовать RTC для более точного хронометража., @Python Schlange
Возможно, вы захотите взглянуть на [Arduion_FreeRTOS](https://github.com/feilipu/Arduino_FreeRTOS_Library), которые реализуют ядро FreeRTOS в среде Arduino., @hcheung