Я использую два шаговых двигателя 28BYJ-48 и простой джойстик с функцией осей X и Y. У меня есть код, который заставляет их работать по отдельности, однако я бы хотел, чтобы мое arduino одновременно отслеживало значения x и y, чтобы при перемещении по диагонали оба двигателя вращались одновременно. Прямо сейчас я могу заставить только один двигатель вращаться за один раз. Я точно знаю, что мне нужно делать, однако я не знаю, как это сделать в Arduino, я обычно использую контроллер TI с блоками кода, поэтому я могу следить за своим кодом во время работы.
Мне нужно, чтобы мой код проверял значения X и Y одновременно, и я могу только заставить его проверять их одно, а затем другое, поэтому только один двигатель вращается за раз, а иногда нет. вижу, что я двигаю джойстик на всех. Это становится немного запутанным и застрявшим время от времени. Я бы вообразил что-то вроде прерывания. Я не уверен, является ли Arduino таким сложным или нет.
Я испробовал множество различных функций, таких как использование циклов while или выполнение whiles, или добавление моего кода второго двигателя в оператор else первого двигателя, чтобы попытаться заставить его взглянуть на него. Я осмотрелся вокруг, пытаясь получить это, но ни у кого нет двух двигателей только по одному за раз. Я также попытался включить оба кода двигателей вместе, чтобы они работали вместе, но ничего не работает.
Приведенный ниже код был изменен из другого кода, который я нашел в Интернете, который предназначен только для одного двигателя.
// include Arduino stepper motor library
#include <Stepper.h>
// define number of steps per revolution
#define STEPS 32
// define stepper motor control pins
#define IN5 7
#define IN6 6
#define IN7 5
#define IN8 4
#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11
// initialize stepper library
Stepper stepper(STEPS, IN8, IN6, IN7, IN5);
Stepper stepper_vert(STEPS, IN4, IN2, IN3, IN1);
// joystick pot output is connected to Arduino A0
#define joystick A1
#define joystick_vert A0 //vert is referring to the vertical axis
void setup()
{
}
void loop()
{
// read analog value from the potentiometer
int val = analogRead(joystick);
int val_vert = analogRead(joystick_vert);
// if the joystic is in the middle ===> stop the motor
if( (val > 490) && (val < 540))
{
digitalWrite(IN5, LOW);
digitalWrite(IN6, LOW);
digitalWrite(IN7, LOW);
digitalWrite(IN8, LOW);
}
else
{
// move the motor in the first direction
while (val >= 520)
{
// map the speed between 5 and 500 rpm
int speed_ = map(val, 520, 1023, 5, 500);
// set motor speed
stepper.setSpeed(speed_);
// move the motor (1 step)
stepper.step(1);
val = analogRead(joystick);
}
// move the motor in the other direction
while (val <= 500)
{
int speed_ = map(val, 500, 0, 5, 500);// map the speed between 5 and 500 rpm
// set motor speed
stepper.setSpeed(speed_);
// move the motor (1 step)
stepper.step(-1);
val = analogRead(joystick);
}
}
if( (val_vert > 490) && (val_vert < 540) )
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
else
{
while (val_vert >= 540)// move the motor in the first direction
{
// map the speed between 5 and 500 rpm
int speed_ = map(val_vert, 540, 1023, 5, 500);
// set motor speed
stepper_vert.setSpeed(speed_);
// move the motor (1 step)
stepper_vert.step(1);
val_vert = analogRead(joystick_vert);
}
// move the motor in the other direction
while (val_vert <= 500)
{
// map the speed between 5 and 500 rpm
int speed_ = map(val_vert, 500, 0, 5, 500);
// set motor speed
stepper_vert.setSpeed(speed_);
// move the motor (1 step)
stepper_vert.step(-1);
val_vert = analogRead(joystick_vert);
}
}
}
без сообщений об ошибках, просто нужно, чтобы оба двигателя работали одновременно, если их значения сообщают им. Если я потяну джойстик прямо вверх или вниз, то будет работать только один мотор, то же самое для левого или правого. Но если я поднимусь вверх и налево, мне нужно, чтобы оба мотора вращались, в зависимости от их значений, они дадут им скорость.