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 10:47:12 2017 +0000
Revision:
13:33024b5880b3
Parent:
11:002927b2675d
Child:
14:076ef843e1ba
merge

Who changed what in which revision?

UserRevisionLine numberNew contents of line
edy05 11:002927b2675d 1 #ifndef HARDWARE_H
edy05 11:002927b2675d 2 #define HARDWARE_H
edy05 2:d172c9963f87 3
edy05 2:d172c9963f87 4 #include "mbed.h"
edy05 2:d172c9963f87 5 #include "PpmRegen.h"
edy05 2:d172c9963f87 6 #include "PID.h"
edy05 2:d172c9963f87 7 #include "hcsr04.h"
edy05 8:b5128641d4cf 8 #include "ConfigFile.h"
edy05 2:d172c9963f87 9
edy05 11:002927b2675d 10
edy05 11:002927b2675d 11 void loadConfigFile(void);
edy05 11:002927b2675d 12 void writeSettingsToConfig(void);
edy05 11:002927b2675d 13 void writeErrorLog(char *message);
edy05 11:002927b2675d 14 void ConvertToCharArray(float number);
edy05 11:002927b2675d 15
edy05 2:d172c9963f87 16 Serial pc(USBTX, USBRX); // tx, rx
edy05 11:002927b2675d 17 PID* _groundDistance;
edy05 11:002927b2675d 18 HCSR04* _sonic;
edy05 11:002927b2675d 19 PpmRegen* _ppmRegen;
edy05 11:002927b2675d 20
edy05 11:002927b2675d 21 ConfigFile _configFile;
edy05 11:002927b2675d 22 LocalFileSystem local("local");
edy05 2:d172c9963f87 23
edy05 2:d172c9963f87 24 Thread serverThread;
edy05 2:d172c9963f87 25 Thread distanceThread;
edy05 2:d172c9963f87 26
edy05 2:d172c9963f87 27 InterruptIn* _interruptPort = new InterruptIn(p28);
edy05 2:d172c9963f87 28 PwmOut* _roll = new PwmOut(p21);
edy05 2:d172c9963f87 29 PwmOut* _pitch = new PwmOut(p22);
edy05 2:d172c9963f87 30 PwmOut* _throttle = new PwmOut(p23);
edy05 2:d172c9963f87 31 PwmOut* _yaw = new PwmOut(p24);
edy05 2:d172c9963f87 32 PwmOut* _aux1 = new PwmOut(p25);
edy05 2:d172c9963f87 33 PwmOut* _aux2 = new PwmOut(p26);
edy05 2:d172c9963f87 34
edy05 2:d172c9963f87 35
edy05 9:86a5af9935b1 36 char* _str = new char[1024];
edy05 13:33024b5880b3 37 bool pidChanged = false;
edy05 9:86a5af9935b1 38 float _P = 0;
edy05 9:86a5af9935b1 39 float _I = 0;
edy05 9:86a5af9935b1 40 float _D = 0;
edy05 8:b5128641d4cf 41
edy05 11:002927b2675d 42
edy05 11:002927b2675d 43
edy05 11:002927b2675d 44
edy05 10:bb9c778f8e3e 45
edy05 9:86a5af9935b1 46 void loadConfigFile(void){
edy05 9:86a5af9935b1 47 //reading configFile
edy05 9:86a5af9935b1 48 _configFile.read("/local/config.cfg");
edy05 9:86a5af9935b1 49 char value[BUFSIZ];
edy05 9:86a5af9935b1 50 if (_configFile.getValue("P", &value[0], sizeof(value)))
edy05 9:86a5af9935b1 51 _P = atof(value);
edy05 9:86a5af9935b1 52 if (_configFile.getValue("I", &value[0], sizeof(value)))
edy05 9:86a5af9935b1 53 _I = atof(value);
edy05 9:86a5af9935b1 54 if (_configFile.getValue("D", &value[0], sizeof(value)))
edy05 9:86a5af9935b1 55 _D = atof(value);
edy05 9:86a5af9935b1 56
edy05 9:86a5af9935b1 57 }
edy05 9:86a5af9935b1 58
edy05 11:002927b2675d 59 void writeSettingsToConfig(void){
edy05 10:bb9c778f8e3e 60 ConvertToCharArray(_P);
edy05 10:bb9c778f8e3e 61 _configFile.setValue("P", _str);
edy05 10:bb9c778f8e3e 62 ConvertToCharArray(_I);
edy05 10:bb9c778f8e3e 63 _configFile.setValue("I", _str);
edy05 10:bb9c778f8e3e 64 ConvertToCharArray(_D);
edy05 10:bb9c778f8e3e 65 _configFile.setValue("D", _str);
edy05 10:bb9c778f8e3e 66
edy05 10:bb9c778f8e3e 67 _configFile.write("/local/config.cfg");
edy05 10:bb9c778f8e3e 68
edy05 13:33024b5880b3 69 pidChanged = true;
edy05 13:33024b5880b3 70
edy05 10:bb9c778f8e3e 71 }
edy05 10:bb9c778f8e3e 72
edy05 11:002927b2675d 73
edy05 11:002927b2675d 74 void writeErrorLog(char *message){
edy05 11:002927b2675d 75 FILE *fp = fopen("/local/errorlog.txt", "w");
edy05 11:002927b2675d 76 fprintf(fp, message);
edy05 11:002927b2675d 77 fclose(fp);
edy05 11:002927b2675d 78
edy05 11:002927b2675d 79 }
edy05 11:002927b2675d 80
edy05 11:002927b2675d 81
edy05 9:86a5af9935b1 82 //Converts float to char array
edy05 9:86a5af9935b1 83 void ConvertToCharArray(float number)
edy05 9:86a5af9935b1 84 {
edy05 9:86a5af9935b1 85 sprintf(_str, "%4.2f", number );
edy05 9:86a5af9935b1 86 }
edy05 8:b5128641d4cf 87
edy05 8:b5128641d4cf 88
edy05 2:d172c9963f87 89 #endif