laptop controlled bluetooth quadcopter
Dependencies: FXAS21000 FXOS8700CQ FXOS8700Q mbed
main.cpp@0:0a1a2f47fd18, 2016-04-27 (annotated)
- Committer:
- siddharthp
- Date:
- Wed Apr 27 15:52:14 2016 +0000
- Revision:
- 0:0a1a2f47fd18
trial 1
Who changed what in which revision?
User | Revision | Line number | New 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 | } |