Use hexiwear as a GPSIMU-AHRS for Nikon DSLR cameras

Dependencies:   FXOS8700CQ FXAS21000 MBed_Adafruit-GPS-Library Hexi_OLED_SSD1351 Hexi_KW40Z Madgwick

Fork of Hexi_Blinky_Example by Hexiwear

/media/uploads/whatnick/hexiwear_docking_station_numbers.jpg

Committer:
whatnick
Date:
Mon Aug 15 06:42:19 2016 +0000
Revision:
15:b5a3e22d706b
Parent:
14:9885c8536437
Child:
16:2e42284011d9
Added GPS and OLED libraries

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dan 0:7dec7e9ac085 1 #include "mbed.h"
whatnick 14:9885c8536437 2 #include "FXOS8700Q.h"
whatnick 15:b5a3e22d706b 3 #include "FXAS21000.h"
whatnick 15:b5a3e22d706b 4 #include "MBed_Adafruit_GPS.h"
whatnick 15:b5a3e22d706b 5 #include "NeatGUI.h"
whatnick 14:9885c8536437 6
whatnick 14:9885c8536437 7 DigitalOut myled(LED3);
whatnick 14:9885c8536437 8 Serial gps(PTD3,PTD2);
whatnick 14:9885c8536437 9 Serial pc(USBTX, USBRX);
dan 0:7dec7e9ac085 10
whatnick 15:b5a3e22d706b 11 SSD1351_SPI OLED128(PTB22,PTB23,PTB21,PTB20,PTD15); //Hexiwear pins for SPI bus OLED (MOSI, MISO, SCK, CS, DC)
whatnick 15:b5a3e22d706b 12
whatnick 14:9885c8536437 13 FXOS8700Q_acc acc( PTC11, PTC10, FXOS8700CQ_SLAVE_ADDR0); // Proper Ports and I2C Address for Hexiwear
whatnick 14:9885c8536437 14 FXOS8700Q_mag mag( PTC11, PTC10, FXOS8700CQ_SLAVE_ADDR0); // Proper Ports and I2C Address for Hexiwear
whatnick 14:9885c8536437 15 MotionSensorDataUnits mag_data;
whatnick 14:9885c8536437 16 MotionSensorDataUnits acc_data;
whatnick 14:9885c8536437 17
whatnick 14:9885c8536437 18 MotionSensorDataCounts mag_raw;
whatnick 14:9885c8536437 19 MotionSensorDataCounts acc_raw;
dan 0:7dec7e9ac085 20
whatnick 15:b5a3e22d706b 21 FXAS21000 gyro( PTC11, PTC10); // Proper Ports for Hexiwear
whatnick 15:b5a3e22d706b 22
dan 0:7dec7e9ac085 23 int main() {
whatnick 14:9885c8536437 24 float faX, faY, faZ;
whatnick 14:9885c8536437 25 float fmX, fmY, fmZ;
whatnick 14:9885c8536437 26 int16_t raX, raY, raZ;
whatnick 14:9885c8536437 27 int16_t rmX, rmY, rmZ;
whatnick 15:b5a3e22d706b 28 float gyro_data[3];
whatnick 15:b5a3e22d706b 29
whatnick 15:b5a3e22d706b 30 Adafruit_GPS myGPS(&gps);
whatnick 15:b5a3e22d706b 31 char c; //when read via Adafruit_GPS::read(), the class returns single character stored here
whatnick 15:b5a3e22d706b 32 myGPS.begin(115200);
whatnick 15:b5a3e22d706b 33 //Turn off all sentences except GGA and RMC
whatnick 15:b5a3e22d706b 34 //For MTK GPS
whatnick 15:b5a3e22d706b 35 myGPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
whatnick 15:b5a3e22d706b 36
whatnick 15:b5a3e22d706b 37 //FOR UBLOX GPS
whatnick 15:b5a3e22d706b 38 myGPS.sendCommand(UBX_DISABLE_ZDA);
whatnick 15:b5a3e22d706b 39 myGPS.sendCommand(UBX_DISABLE_GLL);
whatnick 15:b5a3e22d706b 40 myGPS.sendCommand(UBX_DISABLE_VTG);
whatnick 15:b5a3e22d706b 41 myGPS.sendCommand(UBX_DISABLE_GSV);
whatnick 15:b5a3e22d706b 42 myGPS.sendCommand(UBX_DISABLE_GSA);
whatnick 15:b5a3e22d706b 43
whatnick 15:b5a3e22d706b 44
whatnick 15:b5a3e22d706b 45
whatnick 15:b5a3e22d706b 46 pc.baud(115200);
whatnick 15:b5a3e22d706b 47
whatnick 14:9885c8536437 48 acc.enable();
whatnick 14:9885c8536437 49 pc.printf("\r\n\nFXOS8700Q Who Am I= %X\r\n", acc.whoAmI());
whatnick 15:b5a3e22d706b 50 pc.printf("\r\n\nFXAS21000 Who Am I= %X\r\n", gyro.getWhoAmI());
whatnick 15:b5a3e22d706b 51
whatnick 15:b5a3e22d706b 52 OLED128.open();
whatnick 15:b5a3e22d706b 53 OLED128.state(Display::DISPLAY_ON);
whatnick 15:b5a3e22d706b 54 OLED128.drawCircle(10,10,5,0xff345463);
whatnick 15:b5a3e22d706b 55 OLED128.flush();
whatnick 15:b5a3e22d706b 56
whatnick 14:9885c8536437 57 while (true) {
whatnick 14:9885c8536437 58 acc.getAxis(acc_data);
whatnick 14:9885c8536437 59 mag.getAxis(mag_data);
whatnick 15:b5a3e22d706b 60 gyro.ReadXYZ(gyro_data);
whatnick 14:9885c8536437 61 pc.printf("FXOS8700Q ACC: X=%1.4f Y=%1.4f Z=%1.4f ", acc_data.x, acc_data.y, acc_data.z);
whatnick 14:9885c8536437 62 pc.printf(" MAG: X=%4.1f Y=%4.1f Z=%4.1f\r\n", mag_data.x, mag_data.y, mag_data.z);
whatnick 15:b5a3e22d706b 63 pc.printf("FXAS21000 X=%4.2f Y=%4.2f Z=%4.1f\r\n", gyro_data[0], gyro_data[1], gyro_data[2]);
whatnick 14:9885c8536437 64 acc.getX(&faX);
whatnick 14:9885c8536437 65 acc.getY(&faY);
whatnick 14:9885c8536437 66 acc.getZ(&faZ);
whatnick 14:9885c8536437 67 mag.getX(&fmX);
whatnick 14:9885c8536437 68 mag.getY(&fmY);
whatnick 14:9885c8536437 69 mag.getZ(&fmZ);
whatnick 14:9885c8536437 70 pc.printf("FXOS8700Q ACC: X=%1.4f Y=%1.4f Z=%1.4f ", faX, faY, faZ);
whatnick 14:9885c8536437 71 pc.printf(" MAG: X=%4.1f Y=%4.1f Z=%4.1f\r\n", fmX, fmY, fmZ);
whatnick 14:9885c8536437 72 acc.getAxis(acc_raw);
whatnick 14:9885c8536437 73 mag.getAxis(mag_raw);
whatnick 14:9885c8536437 74 pc.printf("FXOS8700Q ACC: X=%d Y=%d Z=%d ", acc_raw.x, acc_raw.y, acc_raw.z);
whatnick 14:9885c8536437 75 pc.printf(" MAG: X=%d Y=%d Z=%d\r\n", mag_raw.x, mag_raw.y, mag_raw.z);
whatnick 14:9885c8536437 76 acc.getX(&raX);
whatnick 14:9885c8536437 77 acc.getY(&raY);
whatnick 14:9885c8536437 78 acc.getZ(&raZ);
whatnick 14:9885c8536437 79 mag.getX(&rmX);
whatnick 14:9885c8536437 80 mag.getY(&rmY);
whatnick 14:9885c8536437 81 mag.getZ(&rmZ);
whatnick 14:9885c8536437 82 pc.printf("FXOS8700Q ACC: X=%d Y=%d Z=%d ", raX, raY, raZ);
whatnick 15:b5a3e22d706b 83 pc.printf(" MAG: X=%d Y=%d Z=%d\r\n\n", rmX, rmY, rmZ);
whatnick 15:b5a3e22d706b 84
whatnick 15:b5a3e22d706b 85 while(gps.readable())
whatnick 15:b5a3e22d706b 86 {
whatnick 15:b5a3e22d706b 87 c = myGPS.read(); //queries the GPS
whatnick 15:b5a3e22d706b 88
whatnick 15:b5a3e22d706b 89 if (c) {
whatnick 15:b5a3e22d706b 90 pc.printf("%c", c); //this line will echo the GPS data if not paused
whatnick 15:b5a3e22d706b 91 }
whatnick 15:b5a3e22d706b 92 }
whatnick 15:b5a3e22d706b 93
whatnick 15:b5a3e22d706b 94 //check if we recieved a new message from GPS, if so, attempt to parse it,
whatnick 15:b5a3e22d706b 95 if ( myGPS.newNMEAreceived() ) {
whatnick 15:b5a3e22d706b 96 if ( !myGPS.parse(myGPS.lastNMEA()) ) {
whatnick 15:b5a3e22d706b 97 continue;
whatnick 15:b5a3e22d706b 98 }
whatnick 15:b5a3e22d706b 99 }
whatnick 15:b5a3e22d706b 100
whatnick 15:b5a3e22d706b 101 wait(0.1);
stevep 4:81cea7a352b0 102 }
dan 0:7dec7e9ac085 103 }