Задача работы с шилдом решается в 3 этапа:
- Необходимо разобраться с джойстиком от PS2 (возможно и с bluetooth)
- Разобраться как управлять 4 моторами и обращаться к каждому из 16 серв
- Собрать код для управления нашим устройством
1 этап. Библиотека для шилда
После загрузки кода джойстик может не определиться, т.к. он должен быть определен приёмником на стороне контроллера в момент начала алгоритма. иногда нужно нажать reset на ардуинке.
Идеальный код с комментами мы урвём у iArduino, лучше - трудно сделать!
Библиотека от iArduino PS2X_lib
Описание функций библиотеки
- ps2x.config_gamepad(clock,command,attention,data,Pressures,Rumble) - инициализация геймпада с указанием выводов Arduino, к которым он подключен
- ps2x.readType() - чтение типа устройства (1 - тип не установлен; 2 - DualShock; 3 - GuitarHero;)
- ps2x.read_gamepad(motor_1, motor_2) - опрос геймпада с заданием режима работы моторчиков вибрации (motor_1 - большой моторчик (17-19 В), motor_2 - малый моторчик (3.3-5 В) )
- ps2x.NewButtonState() - ИСТИНА, если СОСТОЯНИЕ кнопки изменилось (многократный сигнал) (с ИСТИНА на ЛОЖЬ --ИЛИ-- с ЛОЖЬ на ИСТИНА)
- ps2x.ButtonPressed() - ИСТИНА, если кнопка НАЖАТА (однократный сигнал)
- ps2x.ButtonReleased() - ИСТИНА, если кнопка ОТПУЩЕНА (однократный сигнал)
- ps2x.Button() - ИСТИНА, пока кнопка НАЖИМАЕТСЯ (многократный сигнал)
- ps2x.Analog() - считывает АНАЛОГОВОЕ ЗНАЧЕНИЕ кнопок (список возможных вариантов см. выше)
Переменные
Работа с цифровыми кнопками:
- PSB_START - кнопка СТАРТ
- PSB_SELECT - кнопка СЕЛЕКТ
- PSB_PAD_UP - кнопка "Стрелка ВВЕРХ"
- PSB_PAD_RIGHT - кнопка "Стрелка ВПРАВО"
- PSB_PAD_LEFT - кнопка "Стрелка ВЛЕВО"
- PSB_PAD_DOWN - кнопка "Стрелка ВНИЗ"
- PSB_R1 - кнопка "R1"
- PSB_L1 - кнопка "L2"
- PSB_R2 - кнопка "R2"
- PSB_L2 - кнопка "L2"
- PSB_R3 - кнопка "правый СТИК" (НАЖАТИЕ)
- PSB_L3 - кнопка "левый СТИК" (НАЖАТИЕ)
- PSB_RED - кнопка "круг"
- PSB_PINK - кнопка "квадрат"
- PSB_BLUE - кнопка "крест"
- PSB_GREEN - кнопка "треугольник"
Стики c потенциометрами активируются при зажатой кнопке L1 или R1:
- PSS_LY - потенциометр "ЛЕВЫЙ СТИК" (по оси ОУ)
- PSS_LX - потенциометр "ЛЕВЫЙ СТИК" (по оси ОХ)
- PSS_RY - потенциометр "ПРАВЫЙ СТИК" (по оси ОУ)
- PSS_RX - потенциометр "ПРАВЫЙ СТИК" (по оси ОХ)
Аналоговые кнопки:
- PSAB_PAD_UP - кнопка "Стрелка ВВЕРХ" (аналоговое значение) (0 или 255)
- PSAB_PAD_RIGHT - кнопка "Стрелка ВПРАВО" (аналоговое значение) (0 или 255)
- PSAB_PAD_LEFT - кнопка "Стрелка ВЛЕВО" (аналоговое значение) (0 или 255)
- PSAB_PAD_DOWN - кнопка "Стрелка ВНИЗ" (аналоговое значение) (0 или 255)
- PSAB_R1 - кнопка "R1" (аналоговое значение) (0 или 255)
- PSAB_L1 - кнопка "L2" (аналоговое значение) (0 или 255)
- PSAB_R2 - кнопка "R2" (аналоговое значение) (0 или 255)
- PSAB_L2 - кнопка "L2" (аналоговое значение) (0 или 255)
- PSAB_RED - кнопка "круг" (аналоговое значение) (0 или 255)
- PSAB_PINK - кнопка "квадрат" (аналоговое значение) (0 или 255)
- PSAB_BLUE - кнопка "крест" (аналоговое значение) (0 или 255)
- PSAB_GREEN - кнопка "треугольник" (аналоговое значение) (0 или 255)
Адаптация кода
Пример кода для работы нашего шилда по ссылке.
Ключевая строка :
error = ps2x.config_gamepad(12, 11, 10, 13, true, true);
2 этап. Работа с шилдом
Информации по шилду на удивление не много, хотя штука крайне удобная для самых разных проектов, возможностей с избытком, и всё очень компактно
Более подробная информация о нём же тут
Есть готовое приложение для смартфона, если подключать по BT
Для работы с моторами служит модуль TB6612 и есть ряд примеров тут:
#define PWMD 3
#define DIRD 2
#define PWMC 5
#define DIRC 4
#define PWMB 6
#define DIRB 7
#define PWMA 9
#define DIRA 8
Т.о. моторы задействованы на пинах с 2 по 9
Сервоприводы работают по стандартной схеме для PCA9685 от adafruit через i2c
Важно перед запуском
у меня всё стабильно стало работать только после подключения внешнего питания 5 В к клеммам шилда
Так же джойстик очень быстро ест батарейки ААА, а значит нужно менять их на аккумуляторы. Хотя рабочее напряжение и 3 вольта, но он прекрасно работает и от 4,2 В. Для врезки разъёма с модулем контроля заряда, придётся немного поработать бормашинкой или паяльником ( у кого что есть) или сразу брать нормальный аккумуляторный вариант джойстика. всего лишь 2 вечера и всё работает
Работающий тестовый код по ссылке