LF: гибкий планировщик/библиотека таймеров

Я работаю над несколькими проектами arduino, где мне нужна гибкая библиотека планировщика и/или таймера, и мне было интересно, есть ли у кого-нибудь библиотека, которую они рекомендуют?

Случай 1: У меня есть датчик, который должен собирать наблюдения каждый час, но у него есть определенная последовательность измерений:

  • Включение/загрузка (занимает около 15 секунд)
  • Разминка в течение 60 секунд.
  • Наблюдайте (2 мин), собирайте необработанные данные, генерируйте статистику.
  • Остудить в течение 5 минут.
  • Выключение питания

В этом случае имеется один микроконтроллер, действующий как регистратор данных, который управляет несколькими датчиками и записывает их на SD-карту.

Случай 2: У меня есть печь, которая должна управляться в соответствии с заданным пользователем температурным профилем (скажем, до 6 точек изменения), т. Е.

  • Включить обогреватель
  • Установите температуру 100С и удерживайте в течение 2 минут.
  • Установите температуру 160С и подержите 15 минут.
  • Установите температуру 250С и удерживайте в течение 1 часа.
  • ....
  • Установите температуру 100С и удерживайте в течение 1 часа.
  • Выключите нагреватель

Я знаком с неблокирующими таймерами и (в прошлом) собрал несколько простых таймеров с помощью millis() и некоторых переменных ulong. Увы, сложность и время отладки быстро растут вместе с количеством зависимых таймеров. Прежде чем я сяду и набросаю определение класса, я решил спросить, что используют другие.

, 👍0

Обсуждение

Вы можете использовать RTC для более точного хронометража., @Python Schlange

Возможно, вы захотите взглянуть на [Arduion_FreeRTOS](https://github.com/feilipu/Arduino_FreeRTOS_Library), которые реализуют ядро FreeRTOS в среде Arduino., @hcheung


1 ответ


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 минут, а затем выполнить свою задачу.
,