Декодер 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);
}
Код проверен, код рабочий!