bno sensor for nmea

Dependencies:   BNO055

Committer:
LukeMar
Date:
Sun Mar 17 00:59:10 2019 +0000
Revision:
0:b0181b1ec83e
3/16/19

Who changed what in which revision?

UserRevisionLine numberNew contents of line
LukeMar 0:b0181b1ec83e 1 // Program to test the CAN bus using pins 29 and 30 on the mbed connected
LukeMar 0:b0181b1ec83e 2 // to an MCP2551 CAN transceiver bus IC
LukeMar 0:b0181b1ec83e 3 // Note that this program will only continue to transmit while the TX message is <= 8 bytes long
LukeMar 0:b0181b1ec83e 4
LukeMar 0:b0181b1ec83e 5 #include "mbed.h"
LukeMar 0:b0181b1ec83e 6 #include "BNO055.h"
LukeMar 0:b0181b1ec83e 7
LukeMar 0:b0181b1ec83e 8 #define RUDDER_ID 1
LukeMar 0:b0181b1ec83e 9 #define BNO_ID 2 //Address of this CAN device
LukeMar 0:b0181b1ec83e 10 #define TELE_ID 3
LukeMar 0:b0181b1ec83e 11 #define RC_ID 4
LukeMar 0:b0181b1ec83e 12
LukeMar 0:b0181b1ec83e 13 Serial pc(USBTX, USBRX); //tx, and rx for tera term
LukeMar 0:b0181b1ec83e 14 DigitalOut led1(LED1); //heartbeat
LukeMar 0:b0181b1ec83e 15 DigitalOut led2(LED2); //CAN read activity
LukeMar 0:b0181b1ec83e 16 DigitalOut led3(LED3); //CAN write activity
LukeMar 0:b0181b1ec83e 17 BNO055 bno(p9, p10); // (SDA, SCL) or... SDA is p28, SCL is p27
LukeMar 0:b0181b1ec83e 18 CAN can(p30,p29); //CAN interface
LukeMar 0:b0181b1ec83e 19 Ticker pulse;
LukeMar 0:b0181b1ec83e 20 Timer tlog;
LukeMar 0:b0181b1ec83e 21 int tt = 1500; //thread delay to prevent self inflicted DOS
LukeMar 0:b0181b1ec83e 22
LukeMar 0:b0181b1ec83e 23 void alive(void){
LukeMar 0:b0181b1ec83e 24 led1 = !led1;
LukeMar 0:b0181b1ec83e 25 if(led1)
LukeMar 0:b0181b1ec83e 26 pulse.attach(&alive, .2); // the address of the function to be attached (flip) and the interval (2 seconds)
LukeMar 0:b0181b1ec83e 27 else
LukeMar 0:b0181b1ec83e 28 pulse.attach(&alive, 1.3); // the address of the function to be attached (flip) and the interval (2 seconds)
LukeMar 0:b0181b1ec83e 29 }
LukeMar 0:b0181b1ec83e 30
LukeMar 0:b0181b1ec83e 31 void bno_init(void){
LukeMar 0:b0181b1ec83e 32 if(bno.check()){
LukeMar 0:b0181b1ec83e 33 pc.printf("BNO055 connected\r\n");
LukeMar 0:b0181b1ec83e 34 bno.reset();
LukeMar 0:b0181b1ec83e 35 wait(.5);
LukeMar 0:b0181b1ec83e 36 bno.setmode(OPERATION_MODE_CONFIG);
LukeMar 0:b0181b1ec83e 37 bno.SetExternalCrystal(1);
LukeMar 0:b0181b1ec83e 38 //bno.set_orientation(1);
LukeMar 0:b0181b1ec83e 39 bno.setmode(OPERATION_MODE_NDOF); //Uses magnetometer
LukeMar 0:b0181b1ec83e 40 //bno.setmode(OPERATION_MODE_NDOF_FMC_OFF); //no magnetometer
LukeMar 0:b0181b1ec83e 41 bno.set_angle_units(RADIANS);
LukeMar 0:b0181b1ec83e 42 }
LukeMar 0:b0181b1ec83e 43 else{
LukeMar 0:b0181b1ec83e 44 pc.printf("BNO055 NOT connected\r\n Program Trap.");
LukeMar 0:b0181b1ec83e 45 while(1);
LukeMar 0:b0181b1ec83e 46 }
LukeMar 0:b0181b1ec83e 47 }
LukeMar 0:b0181b1ec83e 48
LukeMar 0:b0181b1ec83e 49
LukeMar 0:b0181b1ec83e 50 int main() {
LukeMar 0:b0181b1ec83e 51 char msg_send[20];
LukeMar 0:b0181b1ec83e 52 Thread::wait(200);
LukeMar 0:b0181b1ec83e 53
LukeMar 0:b0181b1ec83e 54 pulse.attach(&alive, 2.0); // the address of the function to be attached (alive) and the interval (2 seconds)
LukeMar 0:b0181b1ec83e 55 pc.baud(115200);
LukeMar 0:b0181b1ec83e 56 bno_init();
LukeMar 0:b0181b1ec83e 57 can.frequency(500000);
LukeMar 0:b0181b1ec83e 58 tlog.start();
LukeMar 0:b0181b1ec83e 59
LukeMar 0:b0181b1ec83e 60 pc.printf("%s\r\n", __FILE__);
LukeMar 0:b0181b1ec83e 61
LukeMar 0:b0181b1ec83e 62 while(1) {
LukeMar 0:b0181b1ec83e 63
LukeMar 0:b0181b1ec83e 64 bno.get_angles();
LukeMar 0:b0181b1ec83e 65 //sprintf(bnoStr, "%.2f %.2f %.2f",bno.euler.roll, bno.euler.pitch, bno.euler.yaw);
LukeMar 0:b0181b1ec83e 66 sprintf(msg_send, "s%.1f\r\n", bno.euler.pitch); //format output message string
LukeMar 0:b0181b1ec83e 67
LukeMar 0:b0181b1ec83e 68 if(strlen(msg_send) > 8){ //if the message length exceeds 8 bytes
LukeMar 0:b0181b1ec83e 69 sprintf(msg_send, "bError"); //re-format the string as an error
LukeMar 0:b0181b1ec83e 70 }
LukeMar 0:b0181b1ec83e 71
LukeMar 0:b0181b1ec83e 72 if(can.write(CANMessage(BNO_ID, msg_send, strlen(msg_send)))){
LukeMar 0:b0181b1ec83e 73 pc.printf("\r\n Time: %4.3f \t Message: %s", tlog.read(), msg_send);
LukeMar 0:b0181b1ec83e 74 led2 = !led2;
LukeMar 0:b0181b1ec83e 75 //set up a random delay time of up to .79 seconds
LukeMar 0:b0181b1ec83e 76 //delayT = ((rand() % 7) * 31.0) + ((rand() % 9) * .1) + runTime.sec_total;
LukeMar 0:b0181b1ec83e 77 }
LukeMar 0:b0181b1ec83e 78 else{
LukeMar 0:b0181b1ec83e 79 can.reset();
LukeMar 0:b0181b1ec83e 80 }
LukeMar 0:b0181b1ec83e 81 Thread::wait(tt);
LukeMar 0:b0181b1ec83e 82 }//while(1)
LukeMar 0:b0181b1ec83e 83 }//main