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:
Sun Jan 21 17:58:41 2018 +0000
Branch:
DistanceRegulation
Revision:
30:4d1b3926a3cc
Parent:
27:5956d5e3ff63
Added pressure sensor ms5611 - not working - too slow

Who changed what in which revision?

UserRevisionLine numberNew contents of line
edy05 0:5cefadfd5898 1 #include "mbed.h"
edy05 2:d172c9963f87 2 #include "rtos.h"
edy05 2:d172c9963f87 3 #include "hardware.h"
edy05 2:d172c9963f87 4 #include "Server.h"
edy05 1:3a5a074b39e0 5 #include "PpmRegen.h"
edy05 30:4d1b3926a3cc 6 //#include "distanceRegulation.h"
edy05 30:4d1b3926a3cc 7 #include "altitudeRegulation.h"
edy05 30:4d1b3926a3cc 8 #include "ms5611Thread.h"
edy05 2:d172c9963f87 9 #include "hcsr04.h"
edy05 2:d172c9963f87 10 #include "PID.h"
edy05 8:b5128641d4cf 11 #include "ConfigFile.h"
edy05 30:4d1b3926a3cc 12 #include "ms5611.h"
edy05 0:5cefadfd5898 13
edy05 8:b5128641d4cf 14 //TEMP
edy05 11:002927b2675d 15
edy05 0:5cefadfd5898 16
edy05 2:d172c9963f87 17 //VARIABLES
edy05 2:d172c9963f87 18 uint16_t ppmInChannelsValue[CHANNELS];
edy05 2:d172c9963f87 19 volatile uint16_t distance = 0;
edy05 0:5cefadfd5898 20
edy05 0:5cefadfd5898 21 //FUNCTIONS
edy05 0:5cefadfd5898 22 void print_ppmIn(void);
edy05 0:5cefadfd5898 23
edy05 26:11539036f0fb 24 //RtosTimer distanceRegulation(distanceRegulationTask, osTimerPeriodic, (void *)0);
edy05 30:4d1b3926a3cc 25 float currentAltitude = 0.0;
edy05 26:11539036f0fb 26
edy05 0:5cefadfd5898 27 int main(){
edy05 25:69190c222dbf 28 pc.baud(115200);
edy05 25:69190c222dbf 29
edy05 3:6c9f80f5e865 30 // INITIALIZE CLASSES
edy05 2:d172c9963f87 31 _ppmRegen = new PpmRegen(_interruptPort);
edy05 30:4d1b3926a3cc 32 //_sonic = new HCSR04(p29, p30);
edy05 27:5956d5e3ff63 33 _groundDistance = new PID(0, 0, 0, 0.005);
edy05 1:3a5a074b39e0 34
edy05 3:6c9f80f5e865 35 // STARTING THREADS
edy05 2:d172c9963f87 36 serverThread.start(serverRun);
edy05 27:5956d5e3ff63 37 serverThread.set_priority(osPriorityLow);
edy05 30:4d1b3926a3cc 38 //_distanceThread = new Thread(distanceRegulationThread);
edy05 30:4d1b3926a3cc 39 //_distanceThread->set_priority(osPriorityRealtime);
edy05 2:d172c9963f87 40
edy05 30:4d1b3926a3cc 41 ms.cmd_reset();
edy05 30:4d1b3926a3cc 42 _ms5611Thread = new Thread(ms5611Thread);
edy05 30:4d1b3926a3cc 43 _ms5611Thread->set_priority(osPriorityHigh);
edy05 30:4d1b3926a3cc 44
edy05 30:4d1b3926a3cc 45 _altitudeThread = new Thread(altitudeRegulationThread);
edy05 30:4d1b3926a3cc 46 _altitudeThread->set_priority(osPriorityRealtime);
edy05 30:4d1b3926a3cc 47
edy05 3:6c9f80f5e865 48
edy05 0:5cefadfd5898 49 while(1){
edy05 30:4d1b3926a3cc 50
edy05 3:6c9f80f5e865 51 Thread::wait(osWaitForever);
edy05 0:5cefadfd5898 52 }
edy05 0:5cefadfd5898 53
edy05 0:5cefadfd5898 54 }
edy05 0:5cefadfd5898 55
edy05 2:d172c9963f87 56
edy05 0:5cefadfd5898 57 void print_ppmIn(){
edy05 2:d172c9963f87 58 _ppmRegen->getAllChannels(ppmInChannelsValue);
edy05 2:d172c9963f87 59 for(uint8_t channel= 0; channel < CHANNELS; channel++){
edy05 0:5cefadfd5898 60 pc.printf("PPM In Channel %d: %d \n\r", channel, ppmInChannelsValue[channel]);
edy05 0:5cefadfd5898 61 }
edy05 0:5cefadfd5898 62 pc.printf("\n\r");
edy05 0:5cefadfd5898 63 }