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:
Sat Feb 17 15:48:49 2018 +0000
Branch:
DistanceRegulation
Revision:
32:c729e6da7f9a
Parent:
31:5f1737e480f3
Child:
33:a2f9fea05cb9
not working

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 11:002927b2675d 12
edy05 0:5cefadfd5898 13
edy05 2:d172c9963f87 14 //VARIABLES
edy05 2:d172c9963f87 15 uint16_t ppmInChannelsValue[CHANNELS];
edy05 2:d172c9963f87 16 volatile uint16_t distance = 0;
edy05 0:5cefadfd5898 17
edy05 0:5cefadfd5898 18 //FUNCTIONS
edy05 0:5cefadfd5898 19 void print_ppmIn(void);
edy05 0:5cefadfd5898 20
edy05 26:11539036f0fb 21 //RtosTimer distanceRegulation(distanceRegulationTask, osTimerPeriodic, (void *)0);
edy05 26:11539036f0fb 22
edy05 0:5cefadfd5898 23 int main(){
edy05 2:d172c9963f87 24
edy05 25:69190c222dbf 25 pc.baud(115200);
edy05 25:69190c222dbf 26
edy05 3:6c9f80f5e865 27 // INITIALIZE CLASSES
edy05 2:d172c9963f87 28 _ppmRegen = new PpmRegen(_interruptPort);
edy05 2:d172c9963f87 29 _sonic = new HCSR04(p29, p30);
edy05 27:5956d5e3ff63 30 _groundDistance = new PID(0, 0, 0, 0.005);
edy05 1:3a5a074b39e0 31
edy05 31:5f1737e480f3 32 //setup PID
edy05 31:5f1737e480f3 33 loadConfigFile();
edy05 32:c729e6da7f9a 34 _newP = _P;
edy05 32:c729e6da7f9a 35 _newI = _I;
edy05 32:c729e6da7f9a 36 _newD = _D;
edy05 31:5f1737e480f3 37 // to show values in web browser after first load
edy05 31:5f1737e480f3 38 _groundDistance->setInputLimits(0, 300);
edy05 31:5f1737e480f3 39 _groundDistance->setMode(AUTO_MODE);
edy05 31:5f1737e480f3 40 _groundDistance->setTunings(_P, _I, _D);
edy05 31:5f1737e480f3 41 _groundDistance->setOutputLimits(_groundPidMinOutput, _groundPidMaxOutput);
edy05 31:5f1737e480f3 42 _groundDistance->setBias(_bias);
edy05 31:5f1737e480f3 43
edy05 3:6c9f80f5e865 44 // STARTING THREADS
edy05 32:c729e6da7f9a 45 printf("starting server thread \n\r");
edy05 2:d172c9963f87 46 serverThread.start(serverRun);
edy05 32:c729e6da7f9a 47 serverThread.set_priority(osPriorityHigh);
edy05 32:c729e6da7f9a 48 printf("starting distance thread \n\r");
edy05 27:5956d5e3ff63 49 _distanceThread = new Thread(distanceRegulationThread);
edy05 27:5956d5e3ff63 50 _distanceThread->set_priority(osPriorityRealtime);
edy05 26:11539036f0fb 51 //distanceRegulation.start(2);
edy05 27:5956d5e3ff63 52 //_distanceThread.start(distanceRegulationTask);
edy05 2:d172c9963f87 53
edy05 26:11539036f0fb 54 //wait(1);
edy05 3:6c9f80f5e865 55
edy05 0:5cefadfd5898 56 while(1){
edy05 3:6c9f80f5e865 57 Thread::wait(osWaitForever);
edy05 0:5cefadfd5898 58 }
edy05 0:5cefadfd5898 59
edy05 0:5cefadfd5898 60 }
edy05 0:5cefadfd5898 61
edy05 2:d172c9963f87 62
edy05 0:5cefadfd5898 63 void print_ppmIn(){
edy05 2:d172c9963f87 64 _ppmRegen->getAllChannels(ppmInChannelsValue);
edy05 2:d172c9963f87 65 for(uint8_t channel= 0; channel < CHANNELS; channel++){
edy05 0:5cefadfd5898 66 pc.printf("PPM In Channel %d: %d \n\r", channel, ppmInChannelsValue[channel]);
edy05 0:5cefadfd5898 67 }
edy05 0:5cefadfd5898 68 pc.printf("\n\r");
edy05 0:5cefadfd5898 69 }