Есть(пока) две проблемы, которые не могу решить:
1. forward или backward должны, по замыслу, работать одновременно с laying. Сейчас этого не происходит.
2. Как добавить ввод NRot(целое число, положительное) в порт после "f" или "b" команд?
-----------------
Суть устройства - приспособление для перемотки шаговых двигателей по типу, как на видео:
-----------------
- Код: Выделить всё
#include <AccelStepper.h>
// Define some steppers and the pins the will use
AccelStepper stepper1; // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5
AccelStepper stepper2(AccelStepper::FULL4WIRE, 6, 7, 8, 9);
AccelStepper stepper3(AccelStepper::FULL4WIRE, 10, 11, 12, 13);
int NRot = 3; //value of rotation
int NRot_tmp = 0;
int X = 24;
char inc_b; // incoming serial data;
void forward()
{
stepper2.moveTo(40);
stepper2.runToPosition();
stepper2.setCurrentPosition(0);
stepper3.moveTo(20);
stepper3.runToPosition();
stepper3.setCurrentPosition(0);
stepper2.moveTo(-40);
stepper2.runToPosition();
stepper2.setCurrentPosition(0);
stepper3.moveTo(-20);
stepper3.runToPosition();
stepper3.setCurrentPosition(0);
}
void backward()
{
stepper2.moveTo(-40);
stepper2.runToPosition();
stepper2.setCurrentPosition(0);
stepper3.moveTo(-20);
stepper3.runToPosition();
stepper3.setCurrentPosition(0);
stepper2.moveTo(40);
stepper2.runToPosition();
stepper2.setCurrentPosition(0);
stepper3.moveTo(20);
stepper3.runToPosition();
stepper3.setCurrentPosition(0);
}
void laying()
{
stepper1.moveTo(X);
stepper1.runToPosition();
stepper1.setCurrentPosition(0);
stepper1.moveTo(-X);
stepper1.runToPosition();
stepper1.setCurrentPosition(0);
}
void laying_home()
{
stepper1.disableOutputs();
stepper2.disableOutputs();
stepper3.disableOutputs();
}
void setup()
{
Serial.begin(9600);
Serial.println("Enter 'f' or 'b' for dir then value for number of rotation");
stepper1.setMaxSpeed(600.0);
stepper1.setAcceleration(400.0);
stepper2.setMaxSpeed(1000.0);
stepper2.setAcceleration(600.0);
stepper3.setMaxSpeed(1000.0);
stepper3.setAcceleration(600.0);
}
void loop()
{
if (Serial.available())
{
delay(10);
inc_b = Serial.read();
if (inc_b == 'f') //forward
{
NRot_tmp = 0;
while(NRot_tmp < NRot)
{
forward();
NRot_tmp++;
}
for (int a=1; a < NRot; a++)
{
laying();
}
Serial.flush();
//Serial.print("forward ");
}
else if (inc_b == 'b') //backward
{
NRot_tmp = 0;
while(NRot_tmp < NRot)
{
backward();
NRot_tmp++;
}
for (int a=1; a < NRot; a++)
{
laying();
}
Serial.flush();
//Serial.print("backward ");
}
else if (inc_b == 'l') //laying
{
laying();
Serial.flush();
}
else if (inc_b == 'q') //exit
{
laying_home();
Serial.flush();
}
}
//stepper1.run();
//stepper2.run();
//stepper3.run();
//stepper1.stop();
//stepper2.stop();
//stepper3.stop();
}