blue mbed code for the BNO055 imu from adafruit
Dependencies: BNO055 MODSERIAL mbed
Fork of bmbed_lidar_belt by
main.cpp@19:01d091b38d61, 2015-11-27 (annotated)
- Committer:
- rkk
- Date:
- Fri Nov 27 18:34:19 2015 +0000
- Revision:
- 19:01d091b38d61
- Parent:
- 17:32b83c5787fc
acceleration
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
baraki | 0:ce4f790399d9 | 1 | #include "mbed.h" |
baraki | 0:ce4f790399d9 | 2 | #include "MODSERIAL.h" |
baraki | 7:660e8ddb231e | 3 | #include <math.h> |
baraki | 7:660e8ddb231e | 4 | #include "BNO055.h" |
rkk | 5:d4ed744beea2 | 5 | |
baraki | 0:ce4f790399d9 | 6 | #define PC_BAUD 9600 |
rkk | 17:32b83c5787fc | 7 | //#define BT_BAUD 115200 |
rkk | 17:32b83c5787fc | 8 | |
rkk | 17:32b83c5787fc | 9 | //#define TX_PIN p13 |
rkk | 17:32b83c5787fc | 10 | //#define RX_PIN p14 |
baraki | 7:660e8ddb231e | 11 | #define IMU_SDA p28 |
baraki | 7:660e8ddb231e | 12 | #define IMU_SCL p27 |
baraki | 7:660e8ddb231e | 13 | #define PI 3.14159265 |
baraki | 0:ce4f790399d9 | 14 | |
baraki | 7:660e8ddb231e | 15 | BNO055 imu(p28,p27); |
rkk | 5:d4ed744beea2 | 16 | |
rkk | 17:32b83c5787fc | 17 | //MODSERIAL bt(TX_PIN, RX_PIN); |
baraki | 0:ce4f790399d9 | 18 | MODSERIAL pc(USBTX,USBRX); |
rkk | 13:b22fd9c4fbb4 | 19 | |
baraki | 7:660e8ddb231e | 20 | //for calibrating IMU |
baraki | 9:59d23ab8d73b | 21 | //for IMU1: |
rkk | 17:32b83c5787fc | 22 | char cal_vals[22] = {255, 255, 220, 255, 13, 0, 83, 255, 36, 1, 80, 0, 253, 255, 0, 0, 1, 0, 232, 3, 235, 2}; |
baraki | 7:660e8ddb231e | 23 | |
baraki | 0:ce4f790399d9 | 24 | bool newline_detected = false; |
baraki | 0:ce4f790399d9 | 25 | bool newline_sent = false; |
baraki | 0:ce4f790399d9 | 26 | |
baraki | 7:660e8ddb231e | 27 | void setCal(){ |
baraki | 7:660e8ddb231e | 28 | imu.write_calibration_data(); |
baraki | 7:660e8ddb231e | 29 | } |
baraki | 7:660e8ddb231e | 30 | |
baraki | 0:ce4f790399d9 | 31 | // Called everytime a new character goes into |
baraki | 0:ce4f790399d9 | 32 | // the RX buffer. Test that character for \n |
baraki | 0:ce4f790399d9 | 33 | // Note, rxGetLastChar() gets the last char that |
baraki | 0:ce4f790399d9 | 34 | // we received but it does NOT remove it from |
baraki | 0:ce4f790399d9 | 35 | // the RX buffer. |
baraki | 0:ce4f790399d9 | 36 | void rxCallback(MODSERIAL_IRQ_INFO *q) |
baraki | 0:ce4f790399d9 | 37 | { |
baraki | 0:ce4f790399d9 | 38 | MODSERIAL *serial = q->serial; |
baraki | 0:ce4f790399d9 | 39 | if ( serial->rxGetLastChar() == '\n') { |
baraki | 0:ce4f790399d9 | 40 | newline_detected = true; |
baraki | 0:ce4f790399d9 | 41 | } |
baraki | 0:ce4f790399d9 | 42 | |
baraki | 0:ce4f790399d9 | 43 | } |
baraki | 0:ce4f790399d9 | 44 | |
baraki | 0:ce4f790399d9 | 45 | void txCallback(MODSERIAL_IRQ_INFO *q) |
baraki | 0:ce4f790399d9 | 46 | { |
baraki | 0:ce4f790399d9 | 47 | MODSERIAL *serial = q->serial; |
baraki | 0:ce4f790399d9 | 48 | if ( serial->txGetLastChar() == '\0') { |
baraki | 0:ce4f790399d9 | 49 | newline_sent = true; |
baraki | 0:ce4f790399d9 | 50 | } |
baraki | 0:ce4f790399d9 | 51 | } |
baraki | 0:ce4f790399d9 | 52 | |
baraki | 0:ce4f790399d9 | 53 | int main() |
baraki | 0:ce4f790399d9 | 54 | { |
baraki | 0:ce4f790399d9 | 55 | pc.baud(PC_BAUD); |
rkk | 17:32b83c5787fc | 56 | // bt.baud(BT_BAUD); |
baraki | 0:ce4f790399d9 | 57 | pc.attach(&rxCallback, MODSERIAL::RxIrq); |
rkk | 17:32b83c5787fc | 58 | // bt.attach(&txCallback, MODSERIAL::TxIrq); |
baraki | 0:ce4f790399d9 | 59 | |
baraki | 7:660e8ddb231e | 60 | //set up IMU |
baraki | 7:660e8ddb231e | 61 | imu.reset(); |
baraki | 7:660e8ddb231e | 62 | imu.setmode(OPERATION_MODE_NDOF); |
baraki | 7:660e8ddb231e | 63 | setCal(); |
baraki | 7:660e8ddb231e | 64 | imu.get_calib(); |
baraki | 7:660e8ddb231e | 65 | while (imu.calib == 0) |
baraki | 7:660e8ddb231e | 66 | { |
baraki | 7:660e8ddb231e | 67 | imu.get_calib(); |
baraki | 7:660e8ddb231e | 68 | } |
baraki | 7:660e8ddb231e | 69 | |
rkk | 19:01d091b38d61 | 70 | // char sendData[1] = {0x00}; |
baraki | 0:ce4f790399d9 | 71 | |
rkk | 17:32b83c5787fc | 72 | // char btData[12] = {'a','b','c','d','e','f','g','\n','\0'}; |
baraki | 15:d6edd100d7fe | 73 | |
rkk | 17:32b83c5787fc | 74 | while (1) { |
rkk | 19:01d091b38d61 | 75 | //imu.get_angles(); |
rkk | 19:01d091b38d61 | 76 | //float pitch = imu.euler.pitch; |
rkk | 19:01d091b38d61 | 77 | //float yaw = imu.euler.yaw; |
rkk | 19:01d091b38d61 | 78 | //float roll = imu.euler.roll; |
rkk | 19:01d091b38d61 | 79 | //pc.printf("r:%6.2f p:%6.2f y:%6.2f\n",roll, pitch, yaw); |
rkk | 19:01d091b38d61 | 80 | imu.get_accel(); //query the i2c device |
rkk | 19:01d091b38d61 | 81 | pc.printf("x:%6.2f y:%6.2f z:%6.2f\n",imu.accel.x, imu.accel.y, imu.accel.z); |
rkk | 19:01d091b38d61 | 82 | // |
rkk | 19:01d091b38d61 | 83 | //pc.printf("about to send data\n"); |
rkk | 17:32b83c5787fc | 84 | // for(int j=0;j<9;j++){ |
rkk | 17:32b83c5787fc | 85 | // btData[j] = '\0'; |
rkk | 17:32b83c5787fc | 86 | // if(bt.writeable()) |
rkk | 17:32b83c5787fc | 87 | // bt.putc(btData[j]); |
rkk | 17:32b83c5787fc | 88 | // //wait(0.001); |
rkk | 17:32b83c5787fc | 89 | // } |
rkk | 19:01d091b38d61 | 90 | wait(0.3); |
baraki | 1:5b1d88d69aa2 | 91 | //pc.printf("finished sending data\n"); |
baraki | 0:ce4f790399d9 | 92 | } |
baraki | 0:ce4f790399d9 | 93 | } |