ppm
Dependents: Autonomous_quadcopter
Fork of PPM by
PpmRegen.cpp@3:2d4d05f95c1a, 2017-09-27 (annotated)
- 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?
User | Revision | Line number | New 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 | } |