1

Topic: Motor Shield управление 4_мя двигателями и 2_мя сервоприводами

Как можно вписать в RemoteXY - Motor Shield, если есть возможность приведите пример скетча для работы Arduino с Motor Shield  реализующий управление четырьмя двигателями и двумя сервоприводами, с двумя джойстиками и двумя слайдерами,

подключить все по пинам с помощью отдельных драйверов управления двигателями проблем не вызвало, но при использовании Motor Shield очень экономится место, поэтому хотелось бы чтобы у вас поддержка Motor Shield была:)

2

Re: Motor Shield управление 4_мя двигателями и 2_мя сервоприводами

Пояснения к предыдущему топику: Как правильно связать библиотеку AFMotor.h, управляющую четырьмя двигателями и двумя сервоприводами с RemoteXY?

3

Re: Motor Shield управление 4_мя двигателями и 2_мя сервоприводами

В сем привет я тоже новичек в программировании так же столкнулся с этой проблемой так что как смог если кто поправит или сделает мой скетч красивее буду рад ! В моем проекте я использовал : Arduino Mega 2560, HC-05(06) Bluetooth module, Motor Shield. Сам скетч:
//////////////////////////////////////////////
//        RemoteXY include library          //
//////////////////////////////////////////////

// определение режима соединения и подключение библиотеки RemoteXY 
#define REMOTEXY_MODE__HARDSERIAL
#include <AFMotor.h>// Подключаем библиотеку для работы с шилдом
#include <RemoteXY.h>

// настройки соединения 
#define REMOTEXY_SERIAL Serial1
#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,1,
  5,37,11,53,42,42,1,6,31 };
   
// структура определяет все переменные вашего интерфейса управления 
struct {

    // input variable
  int8_t jk_1_x; // =-100..100 координата x положения джойстика
  int8_t jk_1_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;
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.jk_1_y - RemoteXY.jk_1_x);
int v_2=( RemoteXY.jk_1_y + RemoteXY.jk_1_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);     
  }
}

4

Re: Motor Shield управление 4_мя двигателями и 2_мя сервоприводами

Добрый день,S.erg.ei

да управление четырьмя моторами с помощью одного джойстика, работает хорошо
Arduino UNO, HC-05(06) Bluetooth module, Motor Shield.
скетч:
но также присоединяюсь к пожеланию, если кто видит как упростить или улучшить присоединяйтесь,

и у кого есть опыт использования других Shield с этой программой, просьба поделиться smile

// определение режима соединения и подключение библиотеки 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);     
  }
}