Regenerating PPM signal based on distances from ultrasonic sensors, ESP8266 for connectin via wifi. Autonomous quadcopter behaviour, autonomou height holding. Flying direction based on front and back ultrasonic sensors.

Dependencies:   ConfigFile HCSR04 PID PPM2 mbed-rtos mbed

Committer:
edy05
Date:
Thu Oct 26 15:54:47 2017 +0000
Revision:
2:d172c9963f87
Child:
3:6c9f80f5e865
stable release with distanceRegulation thread

Who changed what in which revision?

UserRevisionLine numberNew contents of line
edy05 2:d172c9963f87 1 #include "mbed.h"
edy05 2:d172c9963f87 2 #include "rtos.h"
edy05 2:d172c9963f87 3 #include "hardware.h"
edy05 2:d172c9963f87 4 #include "definitions.h"
edy05 2:d172c9963f87 5
edy05 2:d172c9963f87 6 void distanceRegulationThread(){
edy05 2:d172c9963f87 7 //_ppmRegen = new PpmRegen(_interruptPort);
edy05 2:d172c9963f87 8 //HCSR04 sonic(p6, p7);
edy05 2:d172c9963f87 9 uint16_t channels[CHANNELS];
edy05 2:d172c9963f87 10 int distance=0;
edy05 2:d172c9963f87 11 float groundDistancePidValue;
edy05 2:d172c9963f87 12 int newThrottleValue;
edy05 2:d172c9963f87 13
edy05 2:d172c9963f87 14 //setup PID
edy05 2:d172c9963f87 15 //_groundDistance = new PID(1, 1, 1, 2);
edy05 2:d172c9963f87 16 _groundDistance->setInputLimits(0, 500);
edy05 2:d172c9963f87 17 _groundDistance->setOutputLimits(-100, 100);
edy05 2:d172c9963f87 18 _groundDistance->setMode(AUTO_MODE);
edy05 2:d172c9963f87 19 _groundDistance->setSetPoint(0.0);
edy05 2:d172c9963f87 20 _groundDistance->setBias(0);
edy05 2:d172c9963f87 21
edy05 2:d172c9963f87 22 while(1){
edy05 2:d172c9963f87 23
edy05 2:d172c9963f87 24 _ppmRegen->getAllChannels(channels);
edy05 2:d172c9963f87 25
edy05 2:d172c9963f87 26 distance = _sonic->getDistan();
edy05 2:d172c9963f87 27
edy05 2:d172c9963f87 28 //calculate PID for given channel
edy05 2:d172c9963f87 29 _groundDistance->setProcessValue(distance);
edy05 2:d172c9963f87 30 _groundDistance->setSetPoint(30);
edy05 2:d172c9963f87 31 groundDistancePidValue = _groundDistance->compute();
edy05 2:d172c9963f87 32 //Update PWM values
edy05 2:d172c9963f87 33 //channels[THROTTLE] += groundDistancePidValue;
edy05 2:d172c9963f87 34 newThrottleValue = channels[THROTTLE] + groundDistancePidValue;
edy05 2:d172c9963f87 35
edy05 2:d172c9963f87 36 pc.printf("Sonic distance: %d \n\r", distance);
edy05 2:d172c9963f87 37 pc.printf("channel throttle pid value: %f \n\r", groundDistancePidValue);
edy05 2:d172c9963f87 38 pc.printf("channel throttle original value: %d \n\r", channels[THROTTLE]);
edy05 2:d172c9963f87 39 pc.printf("channel throttle final value: %d \n\r", newThrottleValue);
edy05 2:d172c9963f87 40
edy05 2:d172c9963f87 41
edy05 2:d172c9963f87 42
edy05 2:d172c9963f87 43
edy05 2:d172c9963f87 44 // Generate PWM
edy05 2:d172c9963f87 45 _roll->pulsewidth_us( channels[ROLL]);
edy05 2:d172c9963f87 46 _pitch->pulsewidth_us( channels[PITCH]);
edy05 2:d172c9963f87 47 _yaw->pulsewidth_us( channels[YAW]);
edy05 2:d172c9963f87 48 _throttle->pulsewidth_us(channels[THROTTLE]);
edy05 2:d172c9963f87 49 _aux1->pulsewidth_us( channels[AUX1]);
edy05 2:d172c9963f87 50 _aux2->pulsewidth_us( channels[AUX2]);
edy05 2:d172c9963f87 51
edy05 2:d172c9963f87 52 Thread::wait(500);
edy05 2:d172c9963f87 53
edy05 2:d172c9963f87 54
edy05 2:d172c9963f87 55 }
edy05 2:d172c9963f87 56
edy05 2:d172c9963f87 57 }