ppm

Dependents:   Autonomous_quadcopter

Fork of PPM by Eduard Medla

Committer:
edy05
Date:
Wed Sep 27 17:05:59 2017 +0000
Revision:
3:2d4d05f95c1a
Child:
4:380e7c35e466
Class PpmRegen which read PPM signal and generate PwmOut

Who changed what in which revision?

UserRevisionLine numberNew contents of line
edy05 3:2d4d05f95c1a 1 #include "mbed.h"
edy05 3:2d4d05f95c1a 2 #include "PpmRegen.h"
edy05 3:2d4d05f95c1a 3
edy05 3:2d4d05f95c1a 4 PpmRegen::PpmRegen(PinName InterruptPort, PinName roll, PinName pitch, PinName yaw, PinName throttle, PinName aux1, PinName aux2):
edy05 3:2d4d05f95c1a 5 ppmPin(InterruptPort), _roll(roll), _pitch(pitch), _yaw(yaw), _throttle(throttle), _aux1(aux1), _aux2(aux2){
edy05 3:2d4d05f95c1a 6 current_channel = 0;
edy05 3:2d4d05f95c1a 7 first_reading = true;
edy05 3:2d4d05f95c1a 8 timer.start();
edy05 3:2d4d05f95c1a 9 ppmPin.fall(this, &PpmRegen::fall);
edy05 3:2d4d05f95c1a 10 }
edy05 3:2d4d05f95c1a 11
edy05 3:2d4d05f95c1a 12
edy05 3:2d4d05f95c1a 13 void PpmRegen::getAllChannels(uint16_t all_channels[]){
edy05 3:2d4d05f95c1a 14 for(int i = 0; i < CHANNELS; i++){
edy05 3:2d4d05f95c1a 15 all_channels[i] = channels[i];
edy05 3:2d4d05f95c1a 16 }
edy05 3:2d4d05f95c1a 17
edy05 3:2d4d05f95c1a 18 }
edy05 3:2d4d05f95c1a 19
edy05 3:2d4d05f95c1a 20 void PpmRegen::fall(){
edy05 3:2d4d05f95c1a 21 //__disable_irq();
edy05 3:2d4d05f95c1a 22 uint16_t time = timer.read_us();
edy05 3:2d4d05f95c1a 23
edy05 3:2d4d05f95c1a 24 // we are in synchro zone
edy05 3:2d4d05f95c1a 25 if(time > 2500)
edy05 3:2d4d05f95c1a 26 {
edy05 3:2d4d05f95c1a 27 if(first_reading){
edy05 3:2d4d05f95c1a 28 //channel_correction();
edy05 3:2d4d05f95c1a 29 first_reading = false;
edy05 3:2d4d05f95c1a 30 }
edy05 3:2d4d05f95c1a 31
edy05 3:2d4d05f95c1a 32 current_channel = 0;
edy05 3:2d4d05f95c1a 33
edy05 3:2d4d05f95c1a 34 _roll.pulsewidth_us( channels[0]);
edy05 3:2d4d05f95c1a 35 _pitch.pulsewidth_us( channels[1]);
edy05 3:2d4d05f95c1a 36 _yaw.pulsewidth_us( channels[2]);
edy05 3:2d4d05f95c1a 37 _throttle.pulsewidth_us(channels[3]);
edy05 3:2d4d05f95c1a 38 _aux1.pulsewidth_us( channels[4]);
edy05 3:2d4d05f95c1a 39 _aux2.pulsewidth_us( channels[5]);
edy05 3:2d4d05f95c1a 40 }
edy05 3:2d4d05f95c1a 41 else
edy05 3:2d4d05f95c1a 42 {
edy05 3:2d4d05f95c1a 43 channels[current_channel] = timer.read_us();
edy05 3:2d4d05f95c1a 44 current_channel += 1;
edy05 3:2d4d05f95c1a 45 }
edy05 3:2d4d05f95c1a 46
edy05 3:2d4d05f95c1a 47 timer.reset();
edy05 3:2d4d05f95c1a 48
edy05 3:2d4d05f95c1a 49 //__enable_irq();
edy05 3:2d4d05f95c1a 50 }
edy05 3:2d4d05f95c1a 51
edy05 3:2d4d05f95c1a 52 void PpmRegen::channel_correction(){
edy05 3:2d4d05f95c1a 53 corrections[0] = 1500 - channels[0];
edy05 3:2d4d05f95c1a 54 corrections[1] = 1500 - channels[1];
edy05 3:2d4d05f95c1a 55 corrections[2] = 1500 - channels[2];
edy05 3:2d4d05f95c1a 56 corrections[3] = 1010 - channels[3];
edy05 3:2d4d05f95c1a 57 corrections[4] = 1010 - channels[4];
edy05 3:2d4d05f95c1a 58 corrections[5] = 1010 - channels[5];
edy05 3:2d4d05f95c1a 59 }