Имитация радиоуправления с помощью Arduino UNO
- Войдите на сайт для отправки комментариев
Имеется:
1.плата для управления квадрокоптером.
2. китайская 4-х канальная аппаратура радиоуправления.
http://www.hobbyking.com/hobbyking/store/__8338__Hobby_King_2_4Ghz_4Ch_Tx_Rx_V2_Mode_2_.html
3. arduino UNO.
Обычно коптер управляется с помощью аппаратуры. Задумал сделать упрвление через Wi-Fi через связку ардуины и ArduinoWirelessShield и подключить еще несколько примочек заодно. Ардкино решил подключить заместо приемника на китайскую плату и имитировать обычное радиоуправление не переписывая прошивки самой платы.
В этом собственно и проблема.
Подключил я приемник к ардуино и функцией pulsein() получил сигналы с каналов которые передаются от него на микроконтроллер платы.
int pin_in_1 = 8; unsigned long in_1; void setup() { Serial.begin(9600); pinMode(pin_in_1, INPUT); } void loop() { in_1 = pulseIn(pin_in_1, INPUT); Serial.println(in_1); }
При выключеном передатчике возвращает 0, при включенном число в диапазоне 20000..20800, в зависимости от положения стика на передатчике. Насколько я понял, это время в микросекундах между сигналами HIGH и LOW поступающии с приемника.
Подключил ардуино к пинам для приемника на плате и попытался передать сигнал с такой же частотой, но ничего не получается.
int ledpin_1 = 6; int ledpin_2 = 9; int ledpin_3 = 10; int ledpin_4 = 11; void setup() { pinMode(ledpin_1,OUTPUT); pinMode(ledpin_2,OUTPUT); pinMode(ledpin_3,OUTPUT); pinMode(ledpin_4,OUTPUT); Serial.begin(9600); } void loop() { pulseOut(ledpin_1,20427); pulseOut(ledpin_2,20427); pulseOut(ledpin_3,20427); if (Serial.available() > 0) { for (int i=0; i <= 255; i++){ //incomingByte = Serial.read(); pulseOut(ledpin_4,20000); Serial.println(20000);}} {pulseOut(ledpin_4,20427); Serial.println(20427);} } void pulseOut(int pin, int val) { digitalWrite(pin,HIGH); delayMicroseconds(val); digitalWrite(pin,LOW); }
Подскажите можно ли вообще исполнить эту идею и что я делаю не правильно.
Воспользоваться библиотекой Servo, RC-приемники как раз и генерят на своих выходах ШИМ-сигнал для управления сервами.
maksim
Спасибо. Все заработало.
Можно посмотреть исходник кода?А то у меня такая же проблема возникла