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
distanceRegulation.h@2:d172c9963f87, 2017-10-26 (annotated)
- 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?
User | Revision | Line number | New 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 | } |