Вот и я начал делать подобие робота. Прикупил эту платформу
Драйвер двигателей на L298N. Два канала, на каждом канале по два двигателя, левая и правая сторона. Ардуинка на 328 меге, и цветной дисплей 1.8 дюйма на контролере ST7735 для вывода служебной информации.
Пульт тоже с дисплеем цветным, резистивный джойстик, гироскоп - пока не подключен, DC-DC преобразователь, схема заряда литиевого аккумулятора.
Для радиоуправления выбрал протокол кейлог. В восьми байтах первые четыре это серийник машинки, 5 и 6 байт наклон джойстика по Х и У координатам деленый на 4 (АЦП пульта выдает данные с джойстика от 0 до 1024 значения).
Протокол наверно всетаки не подходящий подобрал, у кейлога сначала идет преамбула в 12 импульсов, потом время тишины в 10Те, потом данные в 64 бита. Получается довольно длинный пакет, еще посылаю два пакета и между ними тишина в 39Те (400*39=15 милисек). А данные нужно обрабатывать быстро, т.к. в последствии хочу поставить трансиверы на СС1101 для контроля уровня сигнала приема-передачи пакетов, чтобы контролировать возможность потери связи. Вопрос - какой протокол радиоуправления оптимален для радиоуправления?
Далее, не могу сообразить по какой формуле совмещать координаты наклона джойстика с командами управления двигателями. Т.Е. функция опроса наклона джойстика
x_position = analogRead(pin_analog_x);
y_position = analogRead(pin_analog_y);
возвращают значения от 0 до 1024, в нормальном состоянии значение 512, когда нет наклона джойстика. И как мне преобразовывать эти значения в команды управления двигателями
digitalWrite(D1, left_napravlenie); // Задаем направление вращения
digitalWrite(D2, riht_napravlenie);
analogWrite(M1, left_motor); // Задаем скорость вращения
analogWrite(M2, riht_motor);
Т.е при наклоне джойстика в лево - платформа должна разворачиваться на месте в левую сторону. При наклоне в лево в перед платформа должна на макс скорости поехать в перед- в лево, т.е. скорость зависит от У наклона а направление заворота от Х координат. И как мне нужно делать преобразования ?