laptop controlled bluetooth quadcopter

Dependencies:   FXAS21000 FXOS8700CQ FXOS8700Q mbed

Committer:
siddharthp
Date:
Wed Apr 27 15:52:14 2016 +0000
Revision:
0:0a1a2f47fd18
trial 1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
siddharthp 0:0a1a2f47fd18 1 #include "mbed.h"
siddharthp 0:0a1a2f47fd18 2 #include "FXOS8700Q.h"
siddharthp 0:0a1a2f47fd18 3 #include "FXOS8700CQ.h"
siddharthp 0:0a1a2f47fd18 4 #include "FXAS21000.h"
siddharthp 0:0a1a2f47fd18 5
siddharthp 0:0a1a2f47fd18 6 // define all ports
siddharthp 0:0a1a2f47fd18 7 PwmOut PWM1(D8); //moveForward
siddharthp 0:0a1a2f47fd18 8 PwmOut PWM2(D9); //moveBack
siddharthp 0:0a1a2f47fd18 9 PwmOut PWM3(D10); //left
siddharthp 0:0a1a2f47fd18 10 PwmOut PWM4(D11); //right
siddharthp 0:0a1a2f47fd18 11
siddharthp 0:0a1a2f47fd18 12 DigitalOut red(LED_RED);
siddharthp 0:0a1a2f47fd18 13 DigitalOut green(LED_GREEN);
siddharthp 0:0a1a2f47fd18 14
siddharthp 0:0a1a2f47fd18 15 Timer GlobalTime;
siddharthp 0:0a1a2f47fd18 16 Timer ProgramTimer;
siddharthp 0:0a1a2f47fd18 17
siddharthp 0:0a1a2f47fd18 18 char c;
siddharthp 0:0a1a2f47fd18 19 int flagBlue;
siddharthp 0:0a1a2f47fd18 20 int sflag;
siddharthp 0:0a1a2f47fd18 21 long loopStartTime;
siddharthp 0:0a1a2f47fd18 22 long timer;
siddharthp 0:0a1a2f47fd18 23
siddharthp 0:0a1a2f47fd18 24 // define bluetooth and acc and gyro
siddharthp 0:0a1a2f47fd18 25 Serial blue(D1,D0); //(TX,DX)
siddharthp 0:0a1a2f47fd18 26 Serial pc(USBTX, USBRX); // Used to debug
siddharthp 0:0a1a2f47fd18 27 FXOS8700Q_acc combo_acc(D14, D15, FXOS8700CQ_SLAVE_ADDR0);
siddharthp 0:0a1a2f47fd18 28 FXOS8700Q_mag combo_mag(D14, D15, FXOS8700CQ_SLAVE_ADDR0);
siddharthp 0:0a1a2f47fd18 29 FXAS21000 gyro(D14, D15);
siddharthp 0:0a1a2f47fd18 30
siddharthp 0:0a1a2f47fd18 31 //define functions
siddharthp 0:0a1a2f47fd18 32 void start(void);
siddharthp 0:0a1a2f47fd18 33 void stop(void);
siddharthp 0:0a1a2f47fd18 34 void moveForward(void);
siddharthp 0:0a1a2f47fd18 35 void moveBack(void);
siddharthp 0:0a1a2f47fd18 36 void moveRight(void);
siddharthp 0:0a1a2f47fd18 37 void moveLeft(void);
siddharthp 0:0a1a2f47fd18 38
siddharthp 0:0a1a2f47fd18 39 void blueInterrupt()
siddharthp 0:0a1a2f47fd18 40 {
siddharthp 0:0a1a2f47fd18 41 c = blue.getc(); //receives the command
siddharthp 0:0a1a2f47fd18 42 flagBlue=1;
siddharthp 0:0a1a2f47fd18 43 }
siddharthp 0:0a1a2f47fd18 44
siddharthp 0:0a1a2f47fd18 45 int main()
siddharthp 0:0a1a2f47fd18 46 {
siddharthp 0:0a1a2f47fd18 47 pc.baud(115200);
siddharthp 0:0a1a2f47fd18 48
siddharthp 0:0a1a2f47fd18 49 float gyro_data[3];
siddharthp 0:0a1a2f47fd18 50 MotionSensorDataUnits adata;
siddharthp 0:0a1a2f47fd18 51 MotionSensorDataUnits mdata;
siddharthp 0:0a1a2f47fd18 52 //int16_t acc_raw[3];
siddharthp 0:0a1a2f47fd18 53
siddharthp 0:0a1a2f47fd18 54 //Bluetooth init
siddharthp 0:0a1a2f47fd18 55 blue.baud(115200);
siddharthp 0:0a1a2f47fd18 56 blue.attach(&blueInterrupt);
siddharthp 0:0a1a2f47fd18 57
siddharthp 0:0a1a2f47fd18 58
siddharthp 0:0a1a2f47fd18 59 printf("\r\nStarting\r\n\r\n");
siddharthp 0:0a1a2f47fd18 60
siddharthp 0:0a1a2f47fd18 61 red = 0; green= 1;
siddharthp 0:0a1a2f47fd18 62 GlobalTime.start();
siddharthp 0:0a1a2f47fd18 63
siddharthp 0:0a1a2f47fd18 64 PWM1.period_ms(20);
siddharthp 0:0a1a2f47fd18 65 PWM1.pulsewidth_us(100);
siddharthp 0:0a1a2f47fd18 66 PWM2.pulsewidth_us(100);
siddharthp 0:0a1a2f47fd18 67 PWM3.pulsewidth_us(100);
siddharthp 0:0a1a2f47fd18 68 PWM4.pulsewidth_us(100);
siddharthp 0:0a1a2f47fd18 69
siddharthp 0:0a1a2f47fd18 70 combo_acc.enable();
siddharthp 0:0a1a2f47fd18 71 combo_mag.enable();
siddharthp 0:0a1a2f47fd18 72 blue.printf("FXOS8700 Combo mag = %X\r\n", combo_mag.whoAmI());
siddharthp 0:0a1a2f47fd18 73 blue.printf("FXOS8700 Combo acc = %X\r\n", combo_acc.whoAmI());
siddharthp 0:0a1a2f47fd18 74 blue.printf("FXAS21000 Gyro = %X\r\n", gyro.getWhoAmI());
siddharthp 0:0a1a2f47fd18 75
siddharthp 0:0a1a2f47fd18 76
siddharthp 0:0a1a2f47fd18 77 ProgramTimer.start();
siddharthp 0:0a1a2f47fd18 78 loopStartTime = ProgramTimer.read_us();
siddharthp 0:0a1a2f47fd18 79 timer = loopStartTime;
siddharthp 0:0a1a2f47fd18 80
siddharthp 0:0a1a2f47fd18 81 wait(1);
siddharthp 0:0a1a2f47fd18 82
siddharthp 0:0a1a2f47fd18 83 c= blue.getc();
siddharthp 0:0a1a2f47fd18 84 if (c == 'x')
siddharthp 0:0a1a2f47fd18 85 {
siddharthp 0:0a1a2f47fd18 86 sflag = 1;
siddharthp 0:0a1a2f47fd18 87 blue.printf("stop\n\r");
siddharthp 0:0a1a2f47fd18 88 red =0; green =1;
siddharthp 0:0a1a2f47fd18 89 stop();
siddharthp 0:0a1a2f47fd18 90 }
siddharthp 0:0a1a2f47fd18 91 else if (c == 'z')
siddharthp 0:0a1a2f47fd18 92 {
siddharthp 0:0a1a2f47fd18 93 blue.printf("up\n\r");
siddharthp 0:0a1a2f47fd18 94 wait(2);
siddharthp 0:0a1a2f47fd18 95 red = 1; green= 0;
siddharthp 0:0a1a2f47fd18 96 start();
siddharthp 0:0a1a2f47fd18 97 }
siddharthp 0:0a1a2f47fd18 98 else if (c == 'w')
siddharthp 0:0a1a2f47fd18 99 {
siddharthp 0:0a1a2f47fd18 100 blue.printf("forward\n\r");
siddharthp 0:0a1a2f47fd18 101 moveForward();
siddharthp 0:0a1a2f47fd18 102 }
siddharthp 0:0a1a2f47fd18 103 else if (c == 's')
siddharthp 0:0a1a2f47fd18 104 {
siddharthp 0:0a1a2f47fd18 105 blue.printf("back\n\r");
siddharthp 0:0a1a2f47fd18 106 moveBack();
siddharthp 0:0a1a2f47fd18 107 }
siddharthp 0:0a1a2f47fd18 108 else if (c == 'a')
siddharthp 0:0a1a2f47fd18 109 {
siddharthp 0:0a1a2f47fd18 110 blue.printf("left\n\r");
siddharthp 0:0a1a2f47fd18 111 moveLeft();
siddharthp 0:0a1a2f47fd18 112 }
siddharthp 0:0a1a2f47fd18 113 else if (c == 'd')
siddharthp 0:0a1a2f47fd18 114 {
siddharthp 0:0a1a2f47fd18 115 blue.printf("right\n\r");
siddharthp 0:0a1a2f47fd18 116 moveRight();
siddharthp 0:0a1a2f47fd18 117 }
siddharthp 0:0a1a2f47fd18 118 else blue.printf("%wrong command: \n\r", c);
siddharthp 0:0a1a2f47fd18 119
siddharthp 0:0a1a2f47fd18 120 while(1)
siddharthp 0:0a1a2f47fd18 121 {
siddharthp 0:0a1a2f47fd18 122 combo_acc.getAxis(adata);
siddharthp 0:0a1a2f47fd18 123 blue.printf("FXOS8700 Acc: X:%6.3f Y:%6.3f Z:%6.3f\r\n", adata.x, adata.y, adata.z);
siddharthp 0:0a1a2f47fd18 124
siddharthp 0:0a1a2f47fd18 125 combo_mag.getAxis(mdata);
siddharthp 0:0a1a2f47fd18 126 blue.printf("FXOS8700 Mag: X:%6.2f Y:%6.2f Z:%6.2f\r\n", mdata.x, mdata.y, mdata.z);
siddharthp 0:0a1a2f47fd18 127
siddharthp 0:0a1a2f47fd18 128 gyro.ReadXYZ(gyro_data);
siddharthp 0:0a1a2f47fd18 129 blue.printf("FXAS21000 Gyro: X:%6.2f Y:%6.2f Z:%6.2f\r\n", gyro_data[0], gyro_data[1], gyro_data[2]);
siddharthp 0:0a1a2f47fd18 130
siddharthp 0:0a1a2f47fd18 131 blue.printf("\r\n");
siddharthp 0:0a1a2f47fd18 132 wait(1);
siddharthp 0:0a1a2f47fd18 133
siddharthp 0:0a1a2f47fd18 134
siddharthp 0:0a1a2f47fd18 135 }
siddharthp 0:0a1a2f47fd18 136
siddharthp 0:0a1a2f47fd18 137 }
siddharthp 0:0a1a2f47fd18 138 void start(void)
siddharthp 0:0a1a2f47fd18 139 {
siddharthp 0:0a1a2f47fd18 140 }
siddharthp 0:0a1a2f47fd18 141
siddharthp 0:0a1a2f47fd18 142 void stop(void)
siddharthp 0:0a1a2f47fd18 143 {
siddharthp 0:0a1a2f47fd18 144 }
siddharthp 0:0a1a2f47fd18 145
siddharthp 0:0a1a2f47fd18 146 void moveForward(void)
siddharthp 0:0a1a2f47fd18 147 {
siddharthp 0:0a1a2f47fd18 148 }
siddharthp 0:0a1a2f47fd18 149
siddharthp 0:0a1a2f47fd18 150 void moveBack(void)
siddharthp 0:0a1a2f47fd18 151 {
siddharthp 0:0a1a2f47fd18 152 }
siddharthp 0:0a1a2f47fd18 153
siddharthp 0:0a1a2f47fd18 154 void moveRight(void)
siddharthp 0:0a1a2f47fd18 155 {
siddharthp 0:0a1a2f47fd18 156 }
siddharthp 0:0a1a2f47fd18 157
siddharthp 0:0a1a2f47fd18 158 void moveLeft(void)
siddharthp 0:0a1a2f47fd18 159 {
siddharthp 0:0a1a2f47fd18 160 }