таймер и степпер

hopichek
Offline
Зарегистрирован: 12.10.2014

Знающие товарищи помогите с кодом.

Такая проблема- с помощью библиотеки stepper.h управляем шаговым двигателем(делаем несколько оборотов), одновременно с этим необходимо через равные промежутки времени выводить информацию на экран.

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

Подскажите как написать что-то вроде внешнего таймер, чтобы независимо от loop-а работало.

Буду крайне благодарен за помощь.

Radjah
Offline
Зарегистрирован: 06.08.2014

Дык в ардуине уже есть несколько таймеров, их и используй.

maksim
Offline
Зарегистрирован: 12.02.2012
achest
achest аватар
Offline
Зарегистрирован: 01.10.2012

hopichek пишет:

Такая проблема- с помощью библиотеки 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.  И сделай так. что бы когда мотор работает, больше ничего не происходило. Светодиодом моргать можно!

 

 

 

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

В описании к библиотеке stepper.h написано что команда steps() блокирующая. Она будет ждать пока двигатель не доедет до указанного места и только после этого продолжит выполнение кода. Можно поковырять библиотеку.