таймер и степпер
- Войдите на сайт для отправки комментариев
Вс, 12/10/2014 - 15:58
Знающие товарищи помогите с кодом.
Такая проблема- с помощью библиотеки stepper.h управляем шаговым двигателем(делаем несколько оборотов), одновременно с этим необходимо через равные промежутки времени выводить информацию на экран.
Пытались сделать с помощью разницы millis - ничего не получается , ибо пока двигатель делает обороты, в loop-е ардуина больше ничего делать не может(я так понял).
Подскажите как написать что-то вроде внешнего таймер, чтобы независимо от loop-а работало.
Буду крайне благодарен за помощь.
Дык в ардуине уже есть несколько таймеров, их и используй.
AccelStepper
Такая проблема- с помощью библиотеки stepper.h управляем шаговым двигателем(делаем несколько оборотов), одновременно с этим необходимо через равные промежутки времени выводить информацию на экран.
Пытались сделать с помощью разницы millis - ничего не получается , ибо пока двигатель делает обороты, в loop-е ардуина больше ничего делать не может(я так понял).
Буду крайне благодарен за помощь.
Сам только через это прошел. Нормального решения к сожалению нет. т.е. есть библиотека TimerOne , есть на пример эта
http://www.leonardomiliani.com/en/2012/leos-un-semplice-so-per-arduino/?lang=en
но ардуино просто не справляется. Ты хочешь одновременно писать на индикатор и обслуживать мотор. Это не возможно. Обе задачи требуют "синхронной" обработки и нормально работать вместе не будут. кроме случая, когда мотор работает ОЧЕНЬ Очень медленно и делает 20..30 шагов в секунду или меньше.
Замерь сколько времени занимает вывод на индикатор. у меня это занимало 50..100мс. А мотору надо было "внимание" каждые 2 мс.
Моя рекомендация: разберись с AccelStepper. И сделай так. что бы когда мотор работает, больше ничего не происходило. Светодиодом моргать можно!
В описании к библиотеке stepper.h написано что команда steps() блокирующая. Она будет ждать пока двигатель не доедет до указанного места и только после этого продолжит выполнение кода. Можно поковырять библиотеку.