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
- Committer:
- edy05
- Date:
- 2017-10-26
- Revision:
- 2:d172c9963f87
- Child:
- 3:6c9f80f5e865
File content as of revision 2:d172c9963f87:
#include "mbed.h" #include "rtos.h" #include "hardware.h" #include "definitions.h" void distanceRegulationThread(){ //_ppmRegen = new PpmRegen(_interruptPort); //HCSR04 sonic(p6, p7); uint16_t channels[CHANNELS]; int distance=0; float groundDistancePidValue; int newThrottleValue; //setup PID //_groundDistance = new PID(1, 1, 1, 2); _groundDistance->setInputLimits(0, 500); _groundDistance->setOutputLimits(-100, 100); _groundDistance->setMode(AUTO_MODE); _groundDistance->setSetPoint(0.0); _groundDistance->setBias(0); while(1){ _ppmRegen->getAllChannels(channels); distance = _sonic->getDistan(); //calculate PID for given channel _groundDistance->setProcessValue(distance); _groundDistance->setSetPoint(30); groundDistancePidValue = _groundDistance->compute(); //Update PWM values //channels[THROTTLE] += groundDistancePidValue; newThrottleValue = channels[THROTTLE] + groundDistancePidValue; pc.printf("Sonic distance: %d \n\r", distance); pc.printf("channel throttle pid value: %f \n\r", groundDistancePidValue); pc.printf("channel throttle original value: %d \n\r", channels[THROTTLE]); pc.printf("channel throttle final value: %d \n\r", newThrottleValue); // Generate PWM _roll->pulsewidth_us( channels[ROLL]); _pitch->pulsewidth_us( channels[PITCH]); _yaw->pulsewidth_us( channels[YAW]); _throttle->pulsewidth_us(channels[THROTTLE]); _aux1->pulsewidth_us( channels[AUX1]); _aux2->pulsewidth_us( channels[AUX2]); Thread::wait(500); } }