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:
Fri Aug 19 02:22:15 2016 +0000
Revision:
20:5a4e47822d79
Parent:
18:76f4fc030036
Child:
21:b165e847c5ba
Happy start message

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 16:2e42284011d9 5 #include "Adafruit_SSD1351.h"
whatnick 16:2e42284011d9 6 //#include "NeatGUI.h"
whatnick 14:9885c8536437 7
whatnick 16:2e42284011d9 8 DigitalOut myled(LED1);
whatnick 16:2e42284011d9 9 DigitalOut BOOSTEN(PTC13); //oled power enable
whatnick 16:2e42284011d9 10
whatnick 14:9885c8536437 11 Serial gps(PTD3,PTD2);
whatnick 14:9885c8536437 12 Serial pc(USBTX, USBRX);
dan 0:7dec7e9ac085 13
whatnick 16:2e42284011d9 14 //SSD1351_SPI OLED96(PTB22,PTB23,PTB21,PTB20,PTD15); //Hexiwear pins for SPI bus OLED (MOSI, MISO, SCK, CS, DC)
whatnick 16:2e42284011d9 15 Adafruit_SSD1351 OLED96(PTB20,PTE6,PTD15,PTB21,PTB22); //Hexiwear pins for SPI bus OLED (CS, RS, DC, SCK, MOSI, MISO);
whatnick 16:2e42284011d9 16
whatnick 16:2e42284011d9 17 //#define BLACK 0x000000
whatnick 16:2e42284011d9 18 //#define WHITE 0xFFFFFF
whatnick 16:2e42284011d9 19 #define GREEN 0x00FF00
whatnick 16:2e42284011d9 20 #define RED 0xFF0000
whatnick 16:2e42284011d9 21 #define BLUE 0x0000FF
whatnick 15:b5a3e22d706b 22
whatnick 14:9885c8536437 23 FXOS8700Q_acc acc( PTC11, PTC10, FXOS8700CQ_SLAVE_ADDR0); // Proper Ports and I2C Address for Hexiwear
whatnick 14:9885c8536437 24 FXOS8700Q_mag mag( PTC11, PTC10, FXOS8700CQ_SLAVE_ADDR0); // Proper Ports and I2C Address for Hexiwear
whatnick 14:9885c8536437 25 MotionSensorDataUnits mag_data;
whatnick 14:9885c8536437 26 MotionSensorDataUnits acc_data;
whatnick 14:9885c8536437 27
whatnick 14:9885c8536437 28 MotionSensorDataCounts mag_raw;
whatnick 14:9885c8536437 29 MotionSensorDataCounts acc_raw;
dan 0:7dec7e9ac085 30
whatnick 15:b5a3e22d706b 31 FXAS21000 gyro( PTC11, PTC10); // Proper Ports for Hexiwear
whatnick 15:b5a3e22d706b 32
dan 0:7dec7e9ac085 33 int main() {
whatnick 14:9885c8536437 34 float faX, faY, faZ;
whatnick 14:9885c8536437 35 float fmX, fmY, fmZ;
whatnick 14:9885c8536437 36 int16_t raX, raY, raZ;
whatnick 14:9885c8536437 37 int16_t rmX, rmY, rmZ;
whatnick 15:b5a3e22d706b 38 float gyro_data[3];
whatnick 15:b5a3e22d706b 39
whatnick 15:b5a3e22d706b 40 Adafruit_GPS myGPS(&gps);
whatnick 15:b5a3e22d706b 41 char c; //when read via Adafruit_GPS::read(), the class returns single character stored here
whatnick 15:b5a3e22d706b 42 myGPS.begin(115200);
whatnick 15:b5a3e22d706b 43 //Turn off all sentences except GGA and RMC
whatnick 15:b5a3e22d706b 44 //For MTK GPS
whatnick 15:b5a3e22d706b 45 myGPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
whatnick 15:b5a3e22d706b 46
whatnick 15:b5a3e22d706b 47 //FOR UBLOX GPS
whatnick 15:b5a3e22d706b 48 myGPS.sendCommand(UBX_DISABLE_ZDA);
whatnick 15:b5a3e22d706b 49 myGPS.sendCommand(UBX_DISABLE_GLL);
whatnick 15:b5a3e22d706b 50 myGPS.sendCommand(UBX_DISABLE_VTG);
whatnick 15:b5a3e22d706b 51 myGPS.sendCommand(UBX_DISABLE_GSV);
whatnick 15:b5a3e22d706b 52 myGPS.sendCommand(UBX_DISABLE_GSA);
whatnick 15:b5a3e22d706b 53
whatnick 15:b5a3e22d706b 54
whatnick 20:5a4e47822d79 55 pc.baud(115200);
whatnick 15:b5a3e22d706b 56
whatnick 14:9885c8536437 57 acc.enable();
whatnick 14:9885c8536437 58 pc.printf("\r\n\nFXOS8700Q Who Am I= %X\r\n", acc.whoAmI());
whatnick 15:b5a3e22d706b 59 pc.printf("\r\n\nFXAS21000 Who Am I= %X\r\n", gyro.getWhoAmI());
whatnick 15:b5a3e22d706b 60
whatnick 16:2e42284011d9 61 BOOSTEN = 1;
whatnick 16:2e42284011d9 62
whatnick 16:2e42284011d9 63 OLED96.begin();
whatnick 16:2e42284011d9 64 //OLED96.invert(true);
whatnick 16:2e42284011d9 65 OLED96.setRotation(0);
whatnick 16:2e42284011d9 66 OLED96.setTextColor(OLED96.Color565(0,255,0));
whatnick 18:76f4fc030036 67 OLED96.setTextWrap(false);
whatnick 16:2e42284011d9 68 OLED96.on();
whatnick 16:2e42284011d9 69 OLED96.fillScreen(BLACK);
whatnick 18:76f4fc030036 70 /*
whatnick 18:76f4fc030036 71 for(int i=0;i<128;i++)
whatnick 18:76f4fc030036 72 {
whatnick 18:76f4fc030036 73 for(int j=0;j<128;j++)
whatnick 18:76f4fc030036 74 {
whatnick 18:76f4fc030036 75 OLED96.drawPixel(i,j,OLED96.Color565(0,255,0));
whatnick 18:76f4fc030036 76 wait(0.1);
whatnick 18:76f4fc030036 77 }
whatnick 18:76f4fc030036 78 }
whatnick 18:76f4fc030036 79 */
whatnick 18:76f4fc030036 80 //OLED96.fillScreen(BLACK);
whatnick 20:5a4e47822d79 81 OLED96.printf("Hello from Hexi\n");
whatnick 20:5a4e47822d79 82 OLED96.printf("I am alive now\n");
whatnick 20:5a4e47822d79 83 OLED96.printf("I am going to be\n");
whatnick 20:5a4e47822d79 84 OLED96.printf("a GPS-AHRS \n");
whatnick 20:5a4e47822d79 85 OLED96.printf("for Nikon D800");
whatnick 20:5a4e47822d79 86
whatnick 16:2e42284011d9 87
whatnick 16:2e42284011d9 88 /*
whatnick 16:2e42284011d9 89 OLED96.open();
whatnick 16:2e42284011d9 90 OLED96.state(Display::DISPLAY_ON);
whatnick 16:2e42284011d9 91 OLED96.drawCircle(10,10,5,0xFFFFFFFF);
whatnick 16:2e42284011d9 92 OLED96.flush();
whatnick 16:2e42284011d9 93 wait(2.0);
whatnick 16:2e42284011d9 94 */
whatnick 16:2e42284011d9 95 //OLED128.state(Display::DISPLAY_OFF);
whatnick 16:2e42284011d9 96
whatnick 16:2e42284011d9 97 //BOOSTEN = 0;
whatnick 15:b5a3e22d706b 98
whatnick 14:9885c8536437 99 while (true) {
whatnick 20:5a4e47822d79 100 /*
whatnick 14:9885c8536437 101 acc.getAxis(acc_data);
whatnick 14:9885c8536437 102 mag.getAxis(mag_data);
whatnick 15:b5a3e22d706b 103 gyro.ReadXYZ(gyro_data);
whatnick 14:9885c8536437 104 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 105 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 106 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 107 acc.getX(&faX);
whatnick 14:9885c8536437 108 acc.getY(&faY);
whatnick 14:9885c8536437 109 acc.getZ(&faZ);
whatnick 14:9885c8536437 110 mag.getX(&fmX);
whatnick 14:9885c8536437 111 mag.getY(&fmY);
whatnick 14:9885c8536437 112 mag.getZ(&fmZ);
whatnick 14:9885c8536437 113 pc.printf("FXOS8700Q ACC: X=%1.4f Y=%1.4f Z=%1.4f ", faX, faY, faZ);
whatnick 14:9885c8536437 114 pc.printf(" MAG: X=%4.1f Y=%4.1f Z=%4.1f\r\n", fmX, fmY, fmZ);
whatnick 14:9885c8536437 115 acc.getAxis(acc_raw);
whatnick 14:9885c8536437 116 mag.getAxis(mag_raw);
whatnick 14:9885c8536437 117 pc.printf("FXOS8700Q ACC: X=%d Y=%d Z=%d ", acc_raw.x, acc_raw.y, acc_raw.z);
whatnick 14:9885c8536437 118 pc.printf(" MAG: X=%d Y=%d Z=%d\r\n", mag_raw.x, mag_raw.y, mag_raw.z);
whatnick 14:9885c8536437 119 acc.getX(&raX);
whatnick 14:9885c8536437 120 acc.getY(&raY);
whatnick 14:9885c8536437 121 acc.getZ(&raZ);
whatnick 14:9885c8536437 122 mag.getX(&rmX);
whatnick 14:9885c8536437 123 mag.getY(&rmY);
whatnick 14:9885c8536437 124 mag.getZ(&rmZ);
whatnick 14:9885c8536437 125 pc.printf("FXOS8700Q ACC: X=%d Y=%d Z=%d ", raX, raY, raZ);
whatnick 15:b5a3e22d706b 126 pc.printf(" MAG: X=%d Y=%d Z=%d\r\n\n", rmX, rmY, rmZ);
whatnick 15:b5a3e22d706b 127
whatnick 20:5a4e47822d79 128 */
whatnick 20:5a4e47822d79 129
whatnick 20:5a4e47822d79 130 c = myGPS.read(); //queries the GPS
whatnick 20:5a4e47822d79 131
whatnick 20:5a4e47822d79 132 if (c) {
whatnick 20:5a4e47822d79 133 pc.printf("%c", c); //this line will echo the GPS data if not paused
whatnick 15:b5a3e22d706b 134 }
whatnick 15:b5a3e22d706b 135
whatnick 15:b5a3e22d706b 136 //check if we recieved a new message from GPS, if so, attempt to parse it,
whatnick 15:b5a3e22d706b 137 if ( myGPS.newNMEAreceived() ) {
whatnick 15:b5a3e22d706b 138 if ( !myGPS.parse(myGPS.lastNMEA()) ) {
whatnick 15:b5a3e22d706b 139 continue;
whatnick 15:b5a3e22d706b 140 }
whatnick 15:b5a3e22d706b 141 }
stevep 4:81cea7a352b0 142 }
dan 0:7dec7e9ac085 143 }