Библиотека AccelStepper
- Войдите на сайт для отправки комментариев
Пнд, 19/02/2018 - 19:02
Всем привет. Начал пользоваться библиотекой AccelStepper, и у меня возникли небольшие вопросы. Первое, что я хотел реализовать - 100 шагов с постоянной скоростью (без ускорения), и у меня получился вот такой код:
#include <AccelStepper.h> AccelStepper stepper(1,2,6); void setup() { stepper.setMaxSpeed(1000); } void loop() { stepper.moveTo(100); stepper.setSpeed(800); stepper.runSpeedToPosition(); }
Затем я попытался сделать небольшой цикл, чтобы данная последовательность действий повторялась 500 раз (к примеру). Т.е. количество шагов должно возрасти, но у меня ничего не получилось - двигатель совершает все те же 100 шагов.
#include <AccelStepper.h> AccelStepper stepper(1,2,6); int i = 0; boolean x = 0; void setup(){ Serial.begin(9600); } void loop(){ while (x < 1) { for (i; i <= 500; i++) { stepper.setMaxSpeed(1000); stepper.moveTo(100); stepper.setSpeed(800); stepper.runSpeedToPosition(); Serial.println(i); } x = x+1; } }
Ну и сами вопросы:
1) В чем моя ошибка?
2) Как сделать задержку в две секунды между шагами цикла?
1)
Serial
.println(i);
<- сколько раз печатает в Serial Monitor ?2) Зачем вы в цикле постоянно задаете setMaxSpeed и пр? Одного раза в setup() не хватает?
1) Печатает все 500
2) Одного раза в setup действительно не хватает. Скорость падает до отвратительного одного шага в секунду
Наверное сейчас более опытные товарищи подскажут, в чем конкретно дело... Я этим аксельстепом не пользуюсь, но нашел вот ссылку: http://arduino.ru/forum/programmirovanie/biblioteka-accelstepper#comment-23110
runSpeedToPosition, если память мне не изменяет не блокируется пока не доедет. Она вроде делает один шаг и возвращается.
Если Вы хотите, чтобы она сначала отработала до конца, а потом только начался второй проход цикла, Вам надо её дождаться.
Я давно с этим дела не имел и попробовать не на чем, но мне кажется (если склероз не изменил), то Вам надо строку 17 заменить на
или даже проще
Попробуйте.
Ни один из способов не помог :т
Ничего не изменилось. Есть идеи? .-.
Других нет. Я давно этим не занимался, а попробовать не на чем, извините.
Переместил вывод i чуть выше и теперь цикл прогоняется только один раз и останавливается
Насколько я помню moveTo привязан к абсолютным единицам. Смените его на move или попробуйте обнулять счетчик (setCurrentPosition) в цикле.
Все, я реализовал. Криво, глупо, но работает :)
Спасибо за наводки!