ppm
Dependents: Autonomous_quadcopter
Fork of PPM by
PpmRegen.cpp@6:0c84dc8ad612, 2018-05-22 (annotated)
- Committer:
- edy05
- Date:
- Tue May 22 19:36:38 2018 +0000
- Revision:
- 6:0c84dc8ad612
- Parent:
- 4:380e7c35e466
Removed PPMRead.h
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
edy05 | 3:2d4d05f95c1a | 1 | #include "PpmRegen.h" |
edy05 | 3:2d4d05f95c1a | 2 | |
edy05 | 4:380e7c35e466 | 3 | PpmRegen::PpmRegen(InterruptIn* interruptPort){ |
edy05 | 4:380e7c35e466 | 4 | ppmPin = interruptPort; |
edy05 | 4:380e7c35e466 | 5 | |
edy05 | 4:380e7c35e466 | 6 | last_channels[ROLL] = 0; |
edy05 | 4:380e7c35e466 | 7 | last_channels[PITCH] = 0; |
edy05 | 4:380e7c35e466 | 8 | last_channels[YAW] = 0; |
edy05 | 4:380e7c35e466 | 9 | last_channels[THROTTLE] = 0; |
edy05 | 4:380e7c35e466 | 10 | last_channels[AUX1] = 0; |
edy05 | 4:380e7c35e466 | 11 | last_channels[AUX2] = 0; |
edy05 | 4:380e7c35e466 | 12 | |
edy05 | 3:2d4d05f95c1a | 13 | current_channel = 0; |
edy05 | 3:2d4d05f95c1a | 14 | timer.start(); |
edy05 | 4:380e7c35e466 | 15 | ppmPin->fall(callback(this, &PpmRegen::fall)); |
edy05 | 3:2d4d05f95c1a | 16 | } |
edy05 | 3:2d4d05f95c1a | 17 | |
edy05 | 3:2d4d05f95c1a | 18 | |
edy05 | 3:2d4d05f95c1a | 19 | void PpmRegen::getAllChannels(uint16_t all_channels[]){ |
edy05 | 3:2d4d05f95c1a | 20 | for(int i = 0; i < CHANNELS; i++){ |
edy05 | 4:380e7c35e466 | 21 | all_channels[i] = last_channels[i]; |
edy05 | 3:2d4d05f95c1a | 22 | } |
edy05 | 3:2d4d05f95c1a | 23 | |
edy05 | 3:2d4d05f95c1a | 24 | } |
edy05 | 3:2d4d05f95c1a | 25 | |
edy05 | 3:2d4d05f95c1a | 26 | void PpmRegen::fall(){ |
edy05 | 4:380e7c35e466 | 27 | __disable_irq(); |
edy05 | 3:2d4d05f95c1a | 28 | uint16_t time = timer.read_us(); |
edy05 | 3:2d4d05f95c1a | 29 | |
edy05 | 3:2d4d05f95c1a | 30 | // we are in synchro zone |
edy05 | 3:2d4d05f95c1a | 31 | if(time > 2500) |
edy05 | 3:2d4d05f95c1a | 32 | { |
edy05 | 3:2d4d05f95c1a | 33 | current_channel = 0; |
edy05 | 4:380e7c35e466 | 34 | last_channels[ROLL] = channels[ROLL]; |
edy05 | 4:380e7c35e466 | 35 | last_channels[PITCH] = channels[PITCH]; |
edy05 | 4:380e7c35e466 | 36 | last_channels[YAW] = channels[YAW]; |
edy05 | 4:380e7c35e466 | 37 | last_channels[THROTTLE] = channels[THROTTLE]; |
edy05 | 4:380e7c35e466 | 38 | last_channels[AUX1] = channels[AUX1]; |
edy05 | 4:380e7c35e466 | 39 | last_channels[AUX2] = channels[AUX2]; |
edy05 | 4:380e7c35e466 | 40 | |
edy05 | 4:380e7c35e466 | 41 | /* |
edy05 | 4:380e7c35e466 | 42 | _roll->pulsewidth_us( channels[ROLL]); |
edy05 | 4:380e7c35e466 | 43 | _pitch->pulsewidth_us( channels[PITCH]); |
edy05 | 4:380e7c35e466 | 44 | _yaw->pulsewidth_us( channels[YAW]); |
edy05 | 4:380e7c35e466 | 45 | _throttle->pulsewidth_us(channels[THROTTLE]); |
edy05 | 4:380e7c35e466 | 46 | _aux1->pulsewidth_us( channels[AUX1]); |
edy05 | 4:380e7c35e466 | 47 | _aux2->pulsewidth_us( channels[AUX2]); |
edy05 | 4:380e7c35e466 | 48 | */ |
edy05 | 3:2d4d05f95c1a | 49 | } |
edy05 | 3:2d4d05f95c1a | 50 | else |
edy05 | 3:2d4d05f95c1a | 51 | { |
edy05 | 3:2d4d05f95c1a | 52 | channels[current_channel] = timer.read_us(); |
edy05 | 3:2d4d05f95c1a | 53 | current_channel += 1; |
edy05 | 3:2d4d05f95c1a | 54 | } |
edy05 | 3:2d4d05f95c1a | 55 | |
edy05 | 3:2d4d05f95c1a | 56 | timer.reset(); |
edy05 | 3:2d4d05f95c1a | 57 | |
edy05 | 4:380e7c35e466 | 58 | __enable_irq(); |
edy05 | 3:2d4d05f95c1a | 59 | } |
edy05 | 3:2d4d05f95c1a | 60 | |
edy05 | 3:2d4d05f95c1a | 61 | void PpmRegen::channel_correction(){ |
edy05 | 4:380e7c35e466 | 62 | corrections[ROLL] = 1500 - channels[ROLL]; |
edy05 | 4:380e7c35e466 | 63 | corrections[PITCH] = 1500 - channels[PITCH]; |
edy05 | 4:380e7c35e466 | 64 | corrections[YAW] = 1500 - channels[YAW]; |
edy05 | 4:380e7c35e466 | 65 | corrections[THROTTLE] = 1010 - channels[THROTTLE]; |
edy05 | 4:380e7c35e466 | 66 | corrections[AUX1] = 1010 - channels[AUX1]; |
edy05 | 4:380e7c35e466 | 67 | corrections[AUX2] = 1010 - channels[AUX2]; |
edy05 | 3:2d4d05f95c1a | 68 | } |