Сбор протокола с вертолета дистанционного управления

83
13

У меня есть мини-вертолет (S107G) и Arduino. Возможности звучали довольно забавно. Поэтому я отправился на поиски протокола для передачи данных с контроллера на вертолет с IR. Я использовал этот код, чтобы попытаться выяснить что-то из этого.

void setup()
{
Serial.begin(9600);
pinMode(12, INPUT_PULLUP); // 12 is IR sensor
}

void loop()
{
Serial.print(digitalRead(12) ? LOW : HIGH);
delay(1);
}

Очевидно, что существует ряд недостатков.

delay(1); произвольно выбран, я не знаю, на какой скорости передаются данные. Это может быть аналоговый вход. (Хотя я сомневаюсь в этом, так как большинство обнаруженных ИК-датчиков не поддерживают это) Я не знаю, когда начинается или заканчивается "пакет".

Если у кого-то из вас есть представление о том, как это сделать, я буду очень благодарен. Благодарю!

EDIT: Я нашел это на SO, и это звучит очень хорошо, но он не углублялся в то, как он это сделал, и каковы его результаты (скорость и т.д.),

спросил(а) 2014-03-23T19:44:00+04:00 6 лет, 7 месяцев назад
1
Решение
58

Вы можете найти полную библиотеку кодов здесь, в моем GITHUB, в котором вы найдете примеры IRsendDemoHelicopter.ino и IRrecvDump.ino. Эти и IRremote.cpp должны ответить на ваши вопросы. У меня было по моему плану (на какое-то время) реализовать передатчик на Esplora.

Ниже приведены микросекунды, найденные по адресу https://github.com/mpflaga/Arduino-IRremote/blob/master/IRremoteInt.h#L192

#define SYMA_UPDATE_PERIOD_CH_A 120 // 0
#define SYMA_UPDATE_PERIOD_CH_B 180 // 1
#define SYMA_HDR_MARK 2000
#define SYMA_HDR_SPACE 2000
#define SYMA_BIT_MARK 320
#define SYMA_ONE_SPACE 687
#define SYMA_ZERO_SPACE 300

и вот схема битов для R3 и R5. Я считаю, что R5 является наиболее распространенным в производстве.

union helicopter {
uint32_t dword;
struct
{
uint8_t Throttle : 7; // 0..6 0 - 127
uint8_t Channel : 1; // 7 A=0, B=1
uint8_t Pitch : 7; // 8..14 0(forward) - 63(center) 127(back)
uint8_t Pspacer : 1; // 15 na
uint8_t Yaw : 7; // 16..22 127(left) - 63(center) - 0(right)
} symaR3;
struct
{
uint8_t Trim : 7; // 0..6 127(left) - 63(center) - 0(right)
uint8_t Tspacer : 1; // 7 na
uint8_t Throttle : 7; // 8..14 0 - 127
uint8_t Channel : 1; // 15 A=0, B=1
uint8_t Pitch : 7; // 16..22 0(forward) - 63(center) 127(back)
uint8_t Pspacer : 1; // 23 na
uint8_t Yaw : 7; // 24..30 127(left) - 63(center) - 0(right)
} symaR5;
};

но всегда возможно, что они вышли с новым шаблоном.

ответил(а) 2014-03-24T16:42:00+04:00 6 лет, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема