Здравствуйте. Помогите!) Всю голову уже сломал. Шаговый мотор имеет несколько режимов работы. По Serial передается переменная, на основании этой переменной выбирается функция. Но функция должна работать до передачи другой переменной, а в моем случае работает только на долю секунды: один шаг мотора, я подозреваю. Второй день гуглю, все бестолку.
#define SMOOTH_ALGORITHM
#include <GyverStepper.h>
GStepper<STEPPER2WIRE> stepper(6400, 4, 3, 2);
int speed;
void setup() {
Serial.begin(9600);
}
void loop() {
speed = Serial.read ();
switch (speed) {
case 's': Slow ();
break;
case 'f': Fast ();
break;
}
}
void Slow () {
stepper.setRunMode(FOLLOW_POS);
stepper.setMaxSpeed(400);
stepper.setAcceleration(500);
if (!stepper.tick()) {
static bool dir;
dir = !dir;
stepper.setTarget(dir ? -400 : 400);
}
}
void Fast () {
stepper.setRunMode(FOLLOW_POS);
stepper.setMaxSpeed(2000);
stepper.setAcceleration(2000);
if (!stepper.tick()) {
static bool dir;
dir = !dir;
stepper.setTarget(dir ? -400 : 400);
}
}
Вам же сказали - прежде чем считать байт из Сериал, надо проверить, а есть ли он там, байт этот? - а вы отмахнулись…
А в целом, весь код никуда не годится вовсе. Поэтому у вас и получается, что мол, “пробовал исправлять - не помогло”. Тут не одна ошибка, и минимум пара десятков.
Проще этот код выкинуть и написать заново нормальный. Изучив внимательно прежде, как работают с Сериал и как управлять двигателем.