в моём случае X - это "диаметр провода", другими словами 1 небольшой сдвиг после 1 витка.
Вопрос в том, как найти, быть ему положительным или отрицательным.
..не совсем понял выражение в скобках: stepper1.moveTo( (Xtmp>0 ? Xstep : -1*Xstep ) );
Добавлено спустя 1 час 15 минут 30 секунд:в симуляции мотор1 делает шаг, потом стоит дёргается.
Добавлено спустя 45 минут 50 секунд:пока так(вроде) вышло:
- Код: Выделить всё • Развернуть
#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);
byte NRot = 9; //value of rotation
int NRot_tmp = 0;
bool lay_dir = true;
int lay_tmp = 0;
int lay_min = 0;
int lay_max = 3;
int X = 10;
char inc_b; // incoming serial data;
//char buff[]= "0000000000";
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);
}
void laying_b()
{
stepper1.runToNewPosition(-X);
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()
{
//int t=0;
if (Serial.available())
{
delay(10);
inc_b = Serial.read();
if (inc_b == 'f') //forward
{
NRot_tmp = 0;
while(NRot_tmp < NRot)
{
forward();
if (lay_dir == true && lay_tmp < lay_max)
{
X = X*1;
lay_dir = true;
lay_tmp++;
}
else
{
lay_dir = false;
}
if (lay_dir == false && lay_tmp == lay_max || lay_tmp == lay_min)
{
X = X*-1;
lay_dir = false;
lay_tmp--;
}
else
{
lay_dir = true;
}
laying();
NRot_tmp++;
}
//NRot = 0;
Serial.flush();
}
else if (inc_b == 'b') //backward
{
NRot_tmp = 0;
while(NRot_tmp < NRot)
{
backward();
if (lay_dir == true && lay_tmp < lay_max)
{
X = X*1;
lay_dir = true;
lay_tmp++;
}
else
{
lay_dir = false;
}
if (lay_dir == false && lay_tmp == lay_max || lay_tmp == lay_min)
{
X = X*-1;
lay_dir = false;
lay_tmp--;
}
else
{
lay_dir = true;
}
laying();
NRot_tmp++;
}
Serial.flush();
}
else if (inc_b == 'l') //laying
{
laying();
Serial.flush();
}
else if (inc_b == 'q') //exit
{
laying_home();
Serial.flush();
}
}
}
Добавлено спустя 1 час 39 минут 22 секунды:... что-то не то