Библиотека 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 заменить на
или даже проще
Попробуйте.
Ни один из способов не помог :т
Ничего не изменилось. Есть идеи? .-.
Других нет. Я давно этим не занимался, а попробовать не на чем, извините.
Serial.println(i); while (stepper.isRunning()) stepper.runSpeedToPosition();Переместил вывод i чуть выше и теперь цикл прогоняется только один раз и останавливается
Насколько я помню moveTo привязан к абсолютным единицам. Смените его на move или попробуйте обнулять счетчик (setCurrentPosition) в цикле.
Все, я реализовал. Криво, глупо, но работает :)
Спасибо за наводки!
#include <AccelStepper.h> AccelStepper stepper(1, 2, 6); boolean x = 0; int i = 1; void setup() { stepper.setMaxSpeed(1000); } void loop() { while (x < 1) { for (i; i <= 5; i++) { do { stepper.move(1000); stepper.setSpeed(400); stepper.runSpeedToPosition(); } while (stepper.currentPosition() != 1000); stepper.setCurrentPosition(0); delay(1000); } x = x + 1; } }