ppm

Dependents:   Autonomous_quadcopter

Fork of PPM by Eduard Medla

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?

UserRevisionLine numberNew 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 }