1

Topic: Дерганье серво при отсутствии действий.

Сделал небольшой проект по управлению 4-х серво.
3 сервы управляются с джойстика. Последняя двумя кнопками.
Не пойму что не так. даже если в проекте вообще ничего не делать, а только прописать наличие серво-приводов в скейче, они постоянно дергаются на месте.
Использую Nano на сенсоршилде, Bluetoth HC-05, Servo SG90.
Проект сперва писал сам в IDE, потом решил попробовать написать в FLProg (вдруг ошибки). Даже добавить график на всякий случай, вдруг переменная угла меняется... Все чисто. Когда управляю джойстиком, серво крутится, но в тоже время продолжает дергаться...
Это проблема с блютузом или какие-то помехи от библиотеки ремоут-икс-игрек?

#define REMOTEXY_MODE__SOFTSERIAL
#include <SoftwareSerial.h>
#include <RemoteXY.h>
#include <Servo.h>
Servo _SM1;
#define REMOTEXY_SERIAL_RX 10
#define REMOTEXY_SERIAL_TX 11
#define REMOTEXY_SERIAL_SPEED 9600
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] = {4, 4, 66, 0, 8, 16, 0, 5, 32, 1, 29, 34, 34, 201, 16, 31, 1, 1, 56, 46, 40, 13, 1, 31, 208, 158, 209, 130, 208, 191, 209, 131, 209, 129, 209, 130, 208, 184, 209, 130, 209, 140, 0, 1, 1, 56, 27, 40, 13, 134, 31, 208, 146, 208, 183, 209, 143, 209, 130, 209, 140, 0, 68, 17, 1, 2, 97, 22, 8, 36};
struct {
  signed char joystick_1_x;
  signed char joystick_1_y;
  unsigned char btn_dismiss;
  unsigned char btn_catch;
  float onlineGraph_1;
  unsigned char connect_flag;
} RemoteXY;
#pragma pack(pop)
int _gtv1;
bool _changeNumber1_Out = 0;
int _changeNumber1_OLV;
void setup()
{
  RemoteXY_Init ();
  _SM1.attach(5);
}
void loop()
{ int _tempVariable_int;
  RemoteXY_Handler  ();
  //Плата:1
  RemoteXY.onlineGraph_1 = _gtv1;
  _gtv1 = (map(((RemoteXY.joystick_1_x)), (-100), (100), (0), (180)));
  if (_changeNumber1_Out) {
    _changeNumber1_Out = 0;
  } else {
    _tempVariable_int = (map(((RemoteXY.joystick_1_x)), (-100), (100), (0), (180)));
    if (_tempVariable_int != _changeNumber1_OLV) {
      _changeNumber1_OLV = _tempVariable_int;
      _changeNumber1_Out = 1;
    }
  }
  if (_changeNumber1_Out) {
    _SM1.write ((map(((RemoteXY.joystick_1_x)), (-100), (100), (0), (180))));
  }
}

2

Re: Дерганье серво при отсутствии действий.

Попробовал управление сервой из примеров http://remotexy.com/ru/examples/servo/
Тоже дергается. Может сенсор шилд. Попробую без него.

3

Re: Дерганье серво при отсутствии действий.

Попробовал без сенсоршилда, дерганье не исчезло. Причем даже без использования RemoteXY. Управлял обычными потенциометрами, питание использовал внешнее.
Попробовал использовать 16-ти канальный драйвер PCA9685, дерганье стало поменьше, но не могу заставить серво двигаться плавно.
Продолжаем эксперименты...
PS. Монолог в виде заметок ученого получились XD

4

Re: Дерганье серво при отсутствии действий.

Проблема обсуждалась достаточно часто и давно. Повторюсь:
Библиотека Servo конфликтует с библиотекой SoftwareSerial, используются одни и те же прерывания.
Решение - перевести RemoteXY на аппаратный сериал.