#include "GyverStepper.h"
#define STEP_A 54// step
#define STEP_B 60
#define STEP_C 46
#define STEP_D 26
#define DIR_A 55 // dir направления вращения
#define DIR_B 61
#define DIR_C 48
#define DIR_D 28
#define EN_A 38// enable вкл/выкл
#define EN_B 56
#define EN_C 62
#define EN_D 24
char thisChar;
byte availableBytes;
String strData = "";
boolean recievedFlag;
int step_X,
step_Y,
step_Z;
// Расположение двигателей (вид сверху)
GStepper<STEPPER2WIRE> stepperA(100, STEP_A, DIR_A, EN_A);// B*******A
GStepper<STEPPER2WIRE> stepperB(100, STEP_B, DIR_B, EN_B);// * *
GStepper<STEPPER2WIRE> stepperC(100, STEP_C, DIR_C, EN_C);// * *
GStepper<STEPPER2WIRE> stepperD(100, STEP_D, DIR_D, EN_D);// D*******C
void setup() {
Serial.begin(115200);
stepperA.setRunMode(FOLLOW_POS);
stepperA.setMaxSpeed(2000);
stepperA.setAcceleration(1000);
stepperA.autoPower(true);
stepperA.enable();
stepperB.setRunMode(FOLLOW_POS);
stepperB.setMaxSpeed(2000);
stepperB.setAcceleration(1000);
stepperB.autoPower(true);
stepperB.enable();
stepperC.setRunMode(FOLLOW_POS);
stepperC.setMaxSpeed(2000);
stepperC.setAcceleration(1000);
stepperC.autoPower(true);
stepperC.enable();
stepperD.setRunMode(FOLLOW_POS);
stepperD.setMaxSpeed(2000);
stepperD.setAcceleration(1000);
stepperD.autoPower(true);
stepperD.enable();
}
void move_X(long steps)
{
stepperA.setTarget(-steps);
stepperB.setTarget(steps);
stepperC.setTarget(-steps);
stepperD.setTarget(steps);
stepperA.tick();
stepperB.tick();
stepperC.tick();
stepperD.tick();
}
void move_clock(long steps)
{
stepperA.setTarget(-steps);
stepperB.setTarget(-steps);
stepperC.setTarget(-steps);
stepperD.setTarget(-steps);
stepperA.tick();
stepperB.tick();
stepperC.tick();
stepperD.tick();
}
void move_Y(long steps)
{
stepperA.setTarget(steps);
stepperB.setTarget(steps);
stepperC.setTarget(-steps);
stepperD.setTarget(-steps);
stepperA.tick();
stepperB.tick();
stepperC.tick();
stepperD.tick();
}
void loop()
{
if (Serial.available() > 0) { // если есть что то на вход
strData = ""; // очистить строку
while (Serial.available() > 0) { // пока идут данные
strData += (char)Serial.read(); // забиваем строку принятыми данными
delay(2); // обязательно задержка, иначе вылетим из цикла раньше времени
}
recievedFlag = true; // поднять флаг что получили данные
}
if (recievedFlag)
{ // если есть принятые данные
int intVal = strData.substring(1).toInt(); // перевести в int всю строку кроме первых двух символов!
String header = strData.substring(0, 1); // создать мини строку, содержащую первые два символа
if (strData.startsWith("X")) // если строка начинается с X
step_X = (long)intVal;
if (strData.startsWith("Y")) // если строка начинается с Y
step_Y = (long)intVal;
if (strData.startsWith("Z")) // если строка начинается с Z
step_Z = (long)intVal;
Serial.print(step_X); Serial.print(" "); move_X(purp);
Serial.print(step_Y); Serial.print(" "); move_Y(step_Y);
Serial.print(step_Z); Serial.println(" ");move_clock(step_Z);
recievedFlag = false; // данные приняты, мой капитан!
// выводим в порт для отладки
}
}