Создание цикла роботы шагового двигателя с помощью библиотеки Accesstepper

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем Grommedia, 2 авг 2018.

  1. Grommedia

    Grommedia Нуб

    Добрый день, прошу помощи в решении такой задачи.
    Есть два шаговых двигателя.
    Требуется сделать движение на н-ое количество шагов первым двигателем.
    Выдержать паузу.
    Сделать второе движение вторым двигателем.
    И сделать ещё одно движение первым шаговым двигателем.(вернуть в исходное положение).
    Изменяемые параметры:
    1.Время задержки.
    2.Количество шагов. (двух двигателей).
    3.Возможность обнуления координат.
    4.Возможность преремищения двигателей пошагово.

    Пример моего недоделанного но робочего кода.

    Код (C++):
    #include <AccelStepper.h>

    AccelStepper Xaxis(1, 9, 8); // pin 9 pul- = step, pin 6 dir- = direction
    //AccelStepper Yaxis(1, 4, 7); // pin 4 = step, pin 7 = direction
    //AccelStepper Zaxis(1, 5, 9); // pin 5 = step, pin 8 = direction

    int state;//0==running; 1==waiting
    unsigned long timer;
    const unsigned long delayTime = 1000;//1s wait
    const long distance = 2000;//number of steps to move at a time

    void setup() {
      // Задаём максимальную скорость двигателя
      Xaxis.setMaxSpeed(3000.0);
      // Задаём ускорение двигателя
      Xaxis.setAcceleration(6000.0);
      // Установим скорость в шагах за секунду
    //  Xaxis.setSpeed(3200);
      // Перемещаем в абсолютно указанное положение
      Xaxis.moveTo(distance);
      //Xaxis.setMaxSpeed(800);
    // Xaxis.setMaxSpeed(20000.0);
    // Xaxis.setAcceleration(15000.0);
    // Xaxis.setSpeed(20000);
    // Xaxis.moveTo(40000);
    // Yaxis.setMaxSpeed(400);
      //Zaxis.setMaxSpeed(400);
    //Xaxis.setSpeed(3000);
    // Yaxis.setSpeed(25);
    // Zaxis.setSpeed(80);
    }

    void loop() {  if(state == 0){//initial state == running
        if(Xaxis.distanceToGo()==0){//steps reached
          state = 1;//enter waiting state
          timer = millis()+delayTime;
        }//if(steps reached)
      }else{//state == waiting
        if(millis()>=timer){//check if delay time is reached
          state = 0;//switch to running state
          Xaxis.move(distance);//initiate move
        }//if(delayTime)
      }//statecheck
      Xaxis.run();
    }//loop()
    /// if(Xaxis.distanceToGo()==0)
      //timer = millis()+delayTime;
    // Xaxis.moveTo(-Xaxis.currentPosition());
       // delay(500);
    // Xaxis.runToPosition();
      //delay(5000);
      // Yaxis.runSpeed();
      // Zaxis.runSpeed();
    //}
     
    Последнее редактирование: 2 янв 2019
  2. Daniil

    Daniil Гуру

    1. В ардуино иде зайдите в "инструменты" -> "автоформатирование" - код станет читабельнее.
    2. Удалите огромное количество закомментированных строк кода (комментарии оставьте)
    3. На форуме воспользуйтесь тегами "code"
    4. я извиняюсь, не могу не заметить, что прозводные от слова "раб" пишут через "а".
    5. для чего вы перечислили изменяемые параметры?

    В чем сложность задачи?