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:
Fri Oct 27 09:09:24 2017 +0000
Revision:
9:86a5af9935b1
Parent:
8:b5128641d4cf
Child:
11:002927b2675d
Server - Reading PID values from configFile

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 2:d172c9963f87 6 #include "distanceRegulation.h"
edy05 2:d172c9963f87 7 #include "hcsr04.h"
edy05 2:d172c9963f87 8 #include "PID.h"
edy05 8:b5128641d4cf 9 #include "ConfigFile.h"
edy05 0:5cefadfd5898 10
edy05 8:b5128641d4cf 11 //TEMP
edy05 9:86a5af9935b1 12 /*
edy05 8:b5128641d4cf 13 ConfigFile _configFile;
edy05 8:b5128641d4cf 14 LocalFileSystem local("local");
edy05 9:86a5af9935b1 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 0:5cefadfd5898 24 int main(){
edy05 2:d172c9963f87 25
edy05 3:6c9f80f5e865 26 // INITIALIZE CLASSES
edy05 2:d172c9963f87 27 _ppmRegen = new PpmRegen(_interruptPort);
edy05 2:d172c9963f87 28 _sonic = new HCSR04(p29, p30);
edy05 2:d172c9963f87 29 _groundDistance = new PID(10, 0, 0, 2);
edy05 1:3a5a074b39e0 30
edy05 3:6c9f80f5e865 31 // STARTING THREADS
edy05 2:d172c9963f87 32 serverThread.start(serverRun);
edy05 2:d172c9963f87 33 distanceThread.start(distanceRegulationThread);
edy05 2:d172c9963f87 34
edy05 2:d172c9963f87 35 wait(1);
edy05 3:6c9f80f5e865 36
edy05 0:5cefadfd5898 37 while(1){
edy05 8:b5128641d4cf 38
edy05 8:b5128641d4cf 39 /*
edy05 8:b5128641d4cf 40 // writing to configFile
edy05 8:b5128641d4cf 41 _configFile.setValue("ahoj", "edo");
edy05 8:b5128641d4cf 42 _configFile.write("/local/config.cfg");
edy05 9:86a5af9935b1 43
edy05 8:b5128641d4cf 44
edy05 8:b5128641d4cf 45 //reading configFile
edy05 8:b5128641d4cf 46 _configFile.read("/local/config.cfg");
edy05 8:b5128641d4cf 47 char* key = "ahoj";
edy05 8:b5128641d4cf 48 char value[BUFSIZ];
edy05 8:b5128641d4cf 49 if (_configFile.getValue(key, &value[0], sizeof(value)))
edy05 8:b5128641d4cf 50 pc.printf("'%s'='%s'\n", key, value);
edy05 9:86a5af9935b1 51 */
edy05 8:b5128641d4cf 52
edy05 8:b5128641d4cf 53 wait(2);
edy05 3:6c9f80f5e865 54 Thread::wait(osWaitForever);
edy05 0:5cefadfd5898 55 }
edy05 0:5cefadfd5898 56
edy05 0:5cefadfd5898 57 }
edy05 0:5cefadfd5898 58
edy05 2:d172c9963f87 59
edy05 0:5cefadfd5898 60 void print_ppmIn(){
edy05 2:d172c9963f87 61 _ppmRegen->getAllChannels(ppmInChannelsValue);
edy05 2:d172c9963f87 62 for(uint8_t channel= 0; channel < CHANNELS; channel++){
edy05 0:5cefadfd5898 63 pc.printf("PPM In Channel %d: %d \n\r", channel, ppmInChannelsValue[channel]);
edy05 0:5cefadfd5898 64 }
edy05 0:5cefadfd5898 65 pc.printf("\n\r");
edy05 0:5cefadfd5898 66 }