Program used to control a quadcopter. It uses a PID library which can be found in: http://developer.mbed.org/cookbook/PID I also uses my own written library for easily controlling quadcopter motors, which can be found in: https://developer.mbed.org/users/moklumbys/code/Quadcopter/ One more library that I used is MPU6050 that was previously written by Erik Olieman but I was able to update it with new functions: https://developer.mbed.org/users/moklumbys/code/MPU6050/

Dependencies:   MPU6050 PID Quadcopter Servo mbed

main.cpp

Committer:
moklumbys
Date:
2015-02-18
Revision:
0:894ba50f267c
Child:
1:40ade596b1e3

File content as of revision 0:894ba50f267c:

#include "mbed.h"
#include "Quadcopter.h"

#define MAX_CALIBRATE 1.0
#define MIN_CALIBRATE 0.35

#define FL   0    // Front left    
#define FR   1    // Front right
#define BL   2    // back left
#define BR   3    // back right
//--------------------------------ALL THE FUNCTION HEADERS-----------------------
float map(float x, float in_min, float in_max, float out_min, float out_max);
//---------------------------------------END-------------------------------------

Quadcopter quad (p21, p22, p23, p24);
Serial pc(USBTX, USBRX); // tx, rx

int main() {
    float pitchDiff;
    float rollDiff;
    float speed[4];
    float actSpeed[4];
    
    quad.calibrate(MIN_CALIBRATE, MAX_CALIBRATE);
    while(1) {
        for (float height = 0.0; height < 0.5; height+=0.05){
            for (int i = 0; i < 4; i++){
                speed[i] = height;
            }
            quad.run (speed);
            wait(0.1);
        }
        for (uint16_t i = 0; i < 600; i++)
        {
            rollPID.setProcessValue (imu.roll);
            rollPID.setProcessValue (imu.pitch);
        
            pitchDif = pitchPID.compute();
            rollDif = rollPID.compute();
        
            quad.stabilise(speed, actSpeed, rollDiff, pitchDiff);
            quad.run(actSpeed);
            
            wait (0.01);
        }
        
        for (float height = 0.5; height > 0.0; height-=0.05){
            for (int i = 0; i < 4; i++){
                speed[i] = height;
            }
            quad.run (speed);
            wait(0.1);
        }
        wait(1);
    }
}

//-----------------------------Mapping function-----------------------------
float map(float x, float in_min, float in_max, float out_min, float out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}