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

hardware.h

Committer:
edy05
Date:
2017-10-27
Branch:
DistanceRegulation
Revision:
14:076ef843e1ba
Parent:
13:33024b5880b3
Child:
15:9cdf757269fb

File content as of revision 14:076ef843e1ba:

#ifndef HARDWARE_H
#define HARDWARE_H

#include "mbed.h"
#include "PpmRegen.h"
#include "PID.h"
#include "hcsr04.h"
#include "ConfigFile.h"


void loadConfigFile(void);
void writeSettingsToConfig(void);
void writeErrorLog(char *message);
void ConvertToCharArray(float number);
void ConvertToCharArray(int number);

Serial pc(USBTX, USBRX); // tx, rx
PID* _groundDistance;
HCSR04* _sonic;
PpmRegen* _ppmRegen;

ConfigFile _configFile;
LocalFileSystem local("local");

Thread serverThread;
Thread distanceThread;

InterruptIn*    _interruptPort =    new InterruptIn(p28);
PwmOut*         _roll =             new PwmOut(p21);
PwmOut*         _pitch =            new PwmOut(p22);
PwmOut*         _throttle =         new PwmOut(p23);
PwmOut*         _yaw =              new PwmOut(p24);
PwmOut*         _aux1 =             new PwmOut(p25);
PwmOut*         _aux2 =             new PwmOut(p26);


char*  _str = new char[1024];
bool pidChanged = false;
float _P = 0;
float _I = 0;
float _D = 0;
int _groundSetPoint = 0;





void loadConfigFile(void){
    //reading configFile
    _configFile.read("/local/config.cfg");
    char value[BUFSIZ];
    if (_configFile.getValue("P", &value[0], sizeof(value)))
        _P = atof(value);
    if (_configFile.getValue("I", &value[0], sizeof(value)))
        _I = atof(value);
    if (_configFile.getValue("D", &value[0], sizeof(value)))
        _D = atof(value);
    if (_configFile.getValue("groundSetPoint", &value[0], sizeof(value)))
        _groundSetPoint = atof(value);
        
}

void writeSettingsToConfig(void){
    ConvertToCharArray(_P);
    _configFile.setValue("P", _str);    
    ConvertToCharArray(_I);
    _configFile.setValue("I", _str);
    ConvertToCharArray(_D);
    _configFile.setValue("D", _str);
    ConvertToCharArray(_groundSetPoint);
    _configFile.setValue("groundSetPoint", _str);
    
    _configFile.write("/local/config.cfg");        
    
    pidChanged = true;
    
}


void writeErrorLog(char *message){
    FILE *fp = fopen("/local/errorlog.txt", "w");  
    fprintf(fp, message);
    fclose(fp);
    
}


//Converts float to char array
void ConvertToCharArray(float number)
{
    sprintf(_str, "%4.2f", number );  
}

//Converts integer to char array
void ConvertToCharArray(int number)
{
    sprintf(_str, "%d", number );  
}


#endif