Декодер PPM приёмника FS-IA6B на восемь каналов
- Войдите на сайт для отправки комментариев
Сб, 02/02/2019 - 16:14
Когда Вам для реализации Ваших хотелок при наличии приёмника FS-IA6B потребуется более чем 6 каналов PWM
можно воспользовать недорогой ARDUINO NANO или её клоном и ниже приведённым скетчем.
Код на реальном изделии не проверялся, но должен работать, ошибки, если таковые найдутся, поправлю.
Режим PS должен отрабатывать правильно, если он должным образом выставлен на аппаратуре управления.
С первого канала приёмника сигнал подаётся на пин 3 ардуины, съём PWM сигнала с цифровых выводов с 5 по 12...
#include <PPMReader.h> #include <InterruptHandler.h> #include <Servo.h> int interruptPin = 3; // пин приемника int channelAmount = 8; // число каналов (max 8 для PPM) PPMReader ppm(interruptPin, channelAmount); #define svr1 5 #define svr2 6 #define svr3 7 #define svr4 8 #define svr5 9 #define svr6 10 #define svr7 11 #define svr8 12 Servo Srv_1; Servo Srv_2; Servo Srv_3; Servo Srv_4; Servo Srv_5; Servo Srv_6; Servo Srv_7; Servo Srv_8; #define ch1 value[1] #define ch2 value[2] #define ch3 value[3] #define ch4 value[4] #define ch5 value[5] #define ch6 value[6] #define ch7 value[7] #define ch8 value[8] unsigned int value[9]; void setup(){//Serial.begin(115200); Srv_1.attach(svr1); Srv_2.attach(svr2); Srv_3.attach(svr3); Srv_4.attach(svr4); Srv_5.attach(svr5); Srv_6.attach(svr6); Srv_7.attach(svr7); Srv_8.attach(svr8); } void read_ppm(){ unsigned long temp; for (int channel = 1; channel <= channelAmount; ++channel) // ВЫВОД ВСЕХ КАНАЛОВ В SERIAL { if(channel==3) {value[channel] = (unsigned int)ppm.rawChannelValue(channel); // FS настроен на стик газа CH3 }else{ value[channel] = (unsigned int)ppm.latestValidChannelValue(channel, 0);} } } void run_ppm(){ Srv_1.write(ch1); Srv_2.write(ch2); Srv_3.write(ch3); Srv_4.write(ch4); Srv_5.write(ch5); Srv_6.write(ch6); Srv_7.write(ch7); Srv_8.write(ch8); } void loop() { read_ppm(); run_ppm(); delay(15); }
Код проверен, код рабочий!