Добрый день,S.erg.ei
да управление четырьмя моторами с помощью одного джойстика, работает хорошо
Arduino UNO, HC-05(06) Bluetooth module, Motor Shield.
скетч:
но также присоединяюсь к пожеланию, если кто видит как упростить или улучшить присоединяйтесь,
и у кого есть опыт использования других Shield с этой программой, просьба поделиться
// определение режима соединения и подключение библиотеки RemoteXY
#define REMOTEXY_MODE__HARDSERIAL
#include <RemoteXY.h>
#include <AFMotor.h>
// настройки соединения
#define REMOTEXY_SERIAL Serial
#define REMOTEXY_SERIAL_SPEED 9600
// Подключаем моторы к клеммникам M1, M2, M3, M4
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);
// конфигурация интерфейса
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
{ 255,2,0,0,0,12,0,8,13,0,
5,0,28,8,46,46,2,26,31 };
// структура определяет все переменные вашего интерфейса управления
struct {
// input variable
int8_t joystick_Q_x; // =-100..100 координата x положения джойстика
int8_t joystick_Q_y; // =-100..100 координата y положения джойстика
// other variable
uint8_t connect_flag; // =1 if wire connected, else =0
} RemoteXY;
#pragma pack(pop)
/*
управление моторами
motor1.run(FORWARD); // Задаем движение вперед
motor1.run(BACKWARD); // Задаем движение назад
motor1.run(RELEASE); // Останавливаем двигатели
motor1.setSpeed(255); // Задаем скорость движения
v - скорость мотора, может принимать значения от -100 до 100
*/
/////////////////////////////////////////////
// END RemoteXY include //
/////////////////////////////////////////////
int v_1;
int v_2;
int v_3;
int v_4;
void setup()
{
motor1.setSpeed(255);
motor2.setSpeed(255);
motor3.setSpeed(255);
motor4.setSpeed(255);
RemoteXY_Init ();
}
void loop()
{
/* обработчик событий модуля RemoteXY */
RemoteXY_Handler ();
int v_1=( RemoteXY.joystick_Q_y - RemoteXY.joystick_Q_x);
int v_2=( RemoteXY.joystick_Q_y + RemoteXY.joystick_Q_x);
int v_3=( RemoteXY.joystick_Q_y - RemoteXY.joystick_Q_x);
int v_4=( RemoteXY.joystick_Q_y + RemoteXY.joystick_Q_x);
/* управляем мотором 1 */
if (v_1>100) v_1=100;
if (v_1<-100) v_1=-100;
if (v_1>0) {
motor1.run(FORWARD);
motor1.setSpeed(v_1*2.55);
}
else if (v_1<0) {
motor1.run(BACKWARD);
motor1.setSpeed((-v_1)*2.55);
}
else {
motor1.run(RELEASE);
motor1.setSpeed(0);
}
/* управляем мотором 2 */
if (v_2>100) v_2=100;
if (v_2<-100) v_2=-100;
if (v_2>0) {
motor2.run(FORWARD);
motor2.setSpeed(v_2*2.55);
}
else if (v_2<0) {
motor2.run(BACKWARD);
motor2.setSpeed((-v_2)*2.55);
}
else {
motor2.run(RELEASE);
motor2.setSpeed(0);
}
/* управляем мотором 3 */
if (v_3>100) v_3=100;
if (v_3<-100) v_3=-100;
if (v_3>0) {
motor3.run(FORWARD);
motor3.setSpeed(v_3*2.55);
}
else if (v_3<0) {
motor3.run(BACKWARD);
motor3.setSpeed((-v_3)*2.55);
}
else {
motor3.run(RELEASE);
motor3.setSpeed(0);
}
/* управляем мотором 4 */
if (v_4>100) v_4=100;
if (v_4<-100) v_4=-100;
if (v_4>0) {
motor4.run(FORWARD);
motor4.setSpeed(v_4*2.55);
}
else if (v_4<0) {
motor4.run(BACKWARD);
motor4.setSpeed((-v_4)*2.55);
}
else {
motor4.run(RELEASE);
motor4.setSpeed(0);
}
}