1

Topic: Некорректно работает скетч!

Добрый день, не могу понять почему при добавлении настроек сервоприводов скетч перестает адекватно работать?
Плата arduino pro mini и bluetooth HM-10
Скетч для погрузчика на две сервы и два мотора



//////////////////////////////////////////////
//        RemoteXY include library          //
//////////////////////////////////////////////

// определение режима соединения и подключение библиотеки RemoteXY 
#define REMOTEXY_MODE__SOFTSERIAL
#include <SoftwareSerial.h>
#include <Servo.h>
#include <RemoteXY.h>

// настройки соединения 
#define REMOTEXY_SERIAL_RX 16
#define REMOTEXY_SERIAL_TX 3
#define REMOTEXY_SERIAL_SPEED 9600


// конфигурация интерфейса   
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
  { 255,7,0,0,0,217,0,8,79,0,
  5,32,52,13,47,47,2,26,19,4,
  48,3,11,9,51,89,26,4,48,17,
  11,9,51,89,26,2,0,31,31,19,
  8,2,26,31,31,79,78,0,79,70,
  70,0,2,0,31,16,19,8,2,26,
  31,31,79,78,0,79,70,70,0,2,
  0,31,47,19,8,2,26,31,31,79,
  78,0,79,70,70,0,129,0,30,11,
  20,4,1,208,147,208,176,208,177,208,
  176,209,128,208,184,209,130,209,139,0,
  129,0,31,25,19,4,1,208,144,208,
  178,208,176,209,128,208,184,208,185,208,
  186,208,176,0,129,0,28,41,25,4,
  1,208,158,209,133,208,187,208,176,208,
  182,208,180,208,181,208,189,208,184,208,
  181,0,129,0,26,0,46,9,64,208,
  159,208,190,208,179,209,128,209,131,208,
  183,209,135,208,184,208,186,0,129,0,
  2,9,11,3,36,208,161,209,130,209,
  128,208,181,208,187,208,176,0,129,0,
  15,9,8,3,36,208,154,208,190,208,
  178,209,136,0 };
   
// структура определяет все переменные вашего интерфейса управления 
struct {

    // input variable
  int8_t joystick_1_x; // =-100..100 координата x положения джойстика
  int8_t joystick_1_y; // =-100..100 координата y положения джойстика
  int8_t strela; // =-100..100 положение слайдера
  int8_t kovsh; // =-100..100 положение слайдера
  uint8_t avar; // =1 если переключатель включен и =0 если отключен
  uint8_t gabariti; // =1 если переключатель включен и =0 если отключен
  uint8_t cooler; // =1 если переключатель включен и =0 если отключен

    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0

} RemoteXY;
#pragma pack(pop)

/////////////////////////////////////////////
//           END RemoteXY include          //
/////////////////////////////////////////////

/* определяем пины управления правым мотором */
#define PIN_MOTOR_RIGHT_UP 7
#define PIN_MOTOR_RIGHT_DN 6
#define PIN_MOTOR_RIGHT_SPEED 10

/* определяем пины управления левым мотором */
#define PIN_MOTOR_LEFT_UP 5
#define PIN_MOTOR_LEFT_DN 4
#define PIN_MOTOR_LEFT_SPEED 9

#define PIN_AVAR A3
#define PIN_GABARITI 13
#define PIN_COOLER A5

Servo myservo;


/* определяем два массива с перечислением пинов для каждого мотора */
unsigned char RightMotor[3] = 
  {PIN_MOTOR_RIGHT_UP, PIN_MOTOR_RIGHT_DN, PIN_MOTOR_RIGHT_SPEED};
unsigned char LeftMotor[3] = 
  {PIN_MOTOR_LEFT_UP, PIN_MOTOR_LEFT_DN, PIN_MOTOR_LEFT_SPEED};

/*
   управление скоростью мотора
   motor - ссылка на массив пинов
   v - скорость мотора, может принимать значения от -100 до 100
*/
void Wheel (unsigned char * motor, int v)
{
  if (v>100) v=100;
  if (v<-100) v=-100;
  if (v>0) {
    digitalWrite(motor[0], HIGH);
    digitalWrite(motor[1], LOW);
    analogWrite(motor[2], v*2.55);
  }
  else if (v<0) {
    digitalWrite(motor[0], LOW);
    digitalWrite(motor[1], HIGH);
    analogWrite(motor[2], (-v)*2.55);
  }
  else {
    digitalWrite(motor[0], LOW);
    digitalWrite(motor[1], LOW);
    analogWrite(motor[2], 0);
  }
}
void setup() 
{
  RemoteXY_Init ();
   
  myservo.attach(11); 
  RemoteXY.kovsh = 80;
 
/* инициализация пинов */
  pinMode (PIN_MOTOR_RIGHT_UP, OUTPUT);
  pinMode (PIN_MOTOR_RIGHT_DN, OUTPUT);
  pinMode (PIN_MOTOR_LEFT_UP, OUTPUT);
  pinMode (PIN_MOTOR_LEFT_DN, OUTPUT);
  pinMode (PIN_AVAR, OUTPUT);
  pinMode (PIN_GABARITI, OUTPUT);
  pinMode (PIN_COOLER, OUTPUT);
   
  // TODO you setup code
   
}

void loop() 

  RemoteXY_Handler ();
   
  digitalWrite(PIN_AVAR, (RemoteXY.avar==0)?LOW:HIGH);
  digitalWrite(PIN_GABARITI, (RemoteXY.gabariti==0)?LOW:HIGH);
  digitalWrite(PIN_COOLER, (RemoteXY.cooler==0)?LOW:HIGH);
   
/* управляем правым мотором */
  Wheel (RightMotor, RemoteXY.joystick_1_y - RemoteXY.joystick_1_x);
  /* управляем левым мотором */
  Wheel (LeftMotor, RemoteXY.joystick_1_y + RemoteXY.joystick_1_x);


int ms = RemoteXY.kovsh; 
  ms = map(ms, 0, 100, 50, 100);
  myservo.write(ms); 

}

2

Re: Некорректно работает скетч!

Возможно вам поможет эта информация
http://forum.remotexy.com/viewtopic.php?id=9

3

Re: Некорректно работает скетч!

пробовал не получается, если подключать все отдельно(разными скетчами) то работает нормально! а вместе не хочет(((

4

Re: Некорректно работает скетч!

В скетче вижу только одну севу, а где вторая, или из за нее все и сбоит?, А вообще попробуй управление слайдером изменить

int8_t strela; // =-100..100 положение слайдера -  на от 0 до 100
int8_t kovsh; // =-100..100 положение слайдера - на от 0 до 100

5

Re: Некорректно работает скетч!

пробовал и так тоже, а мб что то с hm10?

6

Re: Некорректно работает скетч!

Ответ на ваш вопрос есть в описании библиотеки servo.h,
например тут http://arduino.ru/Reference/Library/Servo
На контроллерах отличных от Mega использование библиотеки отключает возможность использовать выходы 9 и 10 в режиме ШИМ даже если привод не подключен к этим выводам.

7

Re: Некорректно работает скетч!

спасибо огромное)))) капал совсем в другую сторону)))
все заработало азы азов))