Помогите с таким маленьким проектом.

sazn
Offline
Зарегистрирован: 24.09.2013

Есть несколько шаговых двигателей не важно како кол-во. 10, 20. Они подключены к ардуино . Шаговые двигатели допустим пронумерованы с 1 до 10 (1, 2 , 3...).

Задача такого плана, в ком порт подаме команду вида : 1 или 2 , или 3. То есть номера двигателей, программа запсукает двигатель. на какое растояние , скорость и ускарение повернеться двигатель залано заранее. 

То есть программа тупо сравнивает значени из ком порта с номером двигателя и запускат нужный:

Вот на примере кое что набросал:

#include <AccelStepper.h>
 
// Define a stepper and the pins it will use
AccelStepper stepper(1, 3, 2); 
long steps = 0;
 
void setup()
  stepper.setMaxSpeed(2000);
  stepper.setAcceleration(3000);
  Serial.begin(9600);
}
 
void loop(){
  if (Serial.available() > 0) {
    steps = Serial.parseInt();
    stepper.move(steps);
        while (stepper.distanceToGo() != 0) {
           stepper.run();
    }
    Serial.println("ok");
  }
}

Но тут просто в ком порт скидываю значение перемещения двигателя.

vvadim
Offline
Зарегистрирован: 23.05.2012

в библиотеке аксельстепер работа с ускорениями блокирующая функция (если память не подводит).

пока мотор не закончит движение ничего на примется из команд и другие моторы (если им отправят команду) не поедут, как то так...

sazn
Offline
Зарегистрирован: 24.09.2013

Мне в принципе и не нужно. Пока один мотор не отработает остальные не должны работать.

vvadim
Offline
Зарегистрирован: 23.05.2012

распишите полностью ваше задание

7808543@gmail.com

harus
Offline
Зарегистрирован: 29.06.2016

Используйте оператор switch case и будет тебе счастье

sazn
Offline
Зарегистрирован: 24.09.2013

Спасибо. Буду изучать.

sazn
Offline
Зарегистрирован: 24.09.2013
ЧТо то типо этого должно получиться? Не ругайте за кривые руки )))
#include <AccelStepper.h>
 
// Define a stepper and the pins it will use
AccelStepper stepper1(1, 3, 2); 
AccelStepper stepper2(1, 4, 5); 
long steps = 0;
 
void setup()
{ 
  stepper1.setMaxSpeed(2000);
  stepper1.setAcceleration(3000);
  
  stepper2.setMaxSpeed(2000);
  stepper2.setAcceleration(3000);
  
   Serial.begin(9600);
}
 
void loop(){
  if (Serial.available() > 0) {
    steps = Serial.parseInt();
   switch (steps) {
    case 1:
      stepper1.move(100);
        while (stepper1.distanceToGo() != 0) {
           stepper1.run();
    }
      break;
    case 2:
      stepper2.move(100);
        while (stepper2.distanceToGo() != 0) {
           stepper2.run();
    }
      break;
    default:

      }
    Serial.println("ok");
  }
}

 

sazn
Offline
Зарегистрирован: 24.09.2013

Спасибо! Вроде как заработало. Попробую подключить второй двигатель и тогда все будет понятно.

sazn
Offline
Зарегистрирован: 24.09.2013

Всем спасибо за помощь. Подключил второй двигатель. Все работает как нужно.