Управление ШД
- Войдите на сайт для отправки комментариев
Ср, 20/12/2017 - 15:30
Доброго времени суток!
Прошу вашей помощи!
Вопрос стоит так: надо управлять ШД: 200 шагов в одну сторону, 200 шагов в другую, таких повторений нужно 2. Как использовать цикл for.
Написал код, двигатель делает шаги вперед и назад в бесконечном цикле.
#include <Stepper.h>
const int stepsPerRevolution = 256;
Stepper myStepper(stepsPerRevolution, 2, 4, 3, 5);
void setup()
{
myStepper.setSpeed(100);
Serial.begin(9600);
}
void loop()
{
for (int i=0; i <= 2; i++)
{
myStepper.step(stepsPerRevolution * 1);
delay(20);
myStepper.step(-stepsPerRevolution * 1);
delay(20);
}
}
Вы бы, что ли, с гугл транслэйтом почитали комменты в примерах к библе Stepper и выяснили, что такое stepsPerRevolution...
А это ничто иное, как количество шагов на полный оборот конкретного шаговика. К примеру, у меня есть ШД, на котором указан паратмер 2 градуса на шаг. Итого получаем 180 шагов на оборот. Что и указываем в stepsPerRevolution.
Что бы сделать полный оборот вызываем myStepper.step(stepsPerRevolution). Что бы сделать один шаг - myStepper.step(1)
Цикл Вам не нужен - заведите переменную-счётчик и в лупе проверяйте, сколько раз выполнили действие.
После for напишы
while(true);
и все.
Ну а как вы хотели? Цикл loop бесконечный сам по себе по определению, вот он и молотит все, что в нем, пока питание не выключить.
Перенесите то, что сейчас у него внутри в setup и оно выполнится только один раз (до перезагрузки контроллера).
И условие подкорректируйте. Сейчас цикл for будет выполняться 3 раза, а не 2, как вы хотите.
меня интересует 100 циклов, а тут написал для примера (код скопировал с компилятора). как будет выглядеть вобщем.
таких повторений нужно 2
меня интересует 100 циклов
Не знаю, как других, а меня просто умиляют такие вопрошающие. Сначала вы сказали одно, потом другое. Так может вам и не шаговиком вовсе управлять надо, а проморгать светодиодом?
Спасибо за помощь откликнувшихся. Я привел пример по которому уже будет строиться весь проект, для понимания. Нет смысла тут описывать весь цикл.
Иван, вы прочитали, что вам написали в сообщении №1 ? Оператор myStepperP.step(stepsPerRevolutionP * 2); сделает не 2 шага, а 512. вас это не смущает? или вы говорили "шаги", а на самом деле имели в виду обороты?
И что за бредовая запись stepsPerRevolutionP * 1 в последних шести блоках? Зачем на единицу умножать, что вы этим хотели сказать миру? :)
Повторюсь, что меня интересовало как в общем виде будет выглядеть данный цикл, а какие конкретно уставки для процесса - это уже будут подгоняться на месте у станка. Тема закрыта. Всем спасибо за помощь!