Program to read data from sensors, write them to a file which can then be interpreted by software to help show the path of a bicycle as it travels around a field

Dependencies:   C12832_lcd FatFileSystemCpp MMA7660 CMPS03 GPS

Fork of MSCUsbHost by Igor Skochinsky

Program to link a compass and a GPS to an MBED to produce a CSV file which can be used to track a bicycle around a field

Results can be found here

Committer:
jrmswell
Date:
Sat Sep 12 14:47:28 2020 +0000
Revision:
24:ffcfb0d9d490
Parent:
21:1990400ca172
Updated to MbedOS5

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbedevilledEgg 4:c64b742e9388 1 #include "mbed.h" // mbed library
mbedevilledEgg 4:c64b742e9388 2 #include "MMA7660.h" // Accelerometer library
mbedevilledEgg 4:c64b742e9388 3 #include "GPS.h" // GPS library
mbedevilledEgg 4:c64b742e9388 4 #include "CMPS03.h" // Compass library
mbedevilledEgg 4:c64b742e9388 5 #include "C12832_lcd.h" // LCD screen library
igorsk 0:e294af8d0e07 6 #include "MSCFileSystem.h"
mbedevilledEgg 4:c64b742e9388 7 #define FSNAME "USB"
mbedevilledEgg 14:d70e165ddf30 8 #define LIM 300
mbedevilledEgg 6:09a0610af8b7 9
mbedevilledEgg 4:c64b742e9388 10 GPS gps(p9, p10); // GPS Connection
mbedevilledEgg 4:c64b742e9388 11 CMPS03 compass(p28, p27, CMPS03_DEFAULT_I2C_ADDRESS); // Compass connection
mbedevilledEgg 4:c64b742e9388 12 MMA7660 MMA(p28, p27); // Accelerometer connection
mbedevilledEgg 4:c64b742e9388 13 C12832_LCD lcd;
mbedevilledEgg 4:c64b742e9388 14 Serial pc(USBTX, USBRX);
mbedevilledEgg 6:09a0610af8b7 15
mbedevilledEgg 4:c64b742e9388 16 // Declarations
mbedevilledEgg 4:c64b742e9388 17 float ax, ay, az;
mbedevilledEgg 4:c64b742e9388 18 DigitalOut connectionLed(LED1);
mbedevilledEgg 4:c64b742e9388 19 MSCFileSystem msc("USB"); // Mount USB stick under the name "USB"
mbedevilledEgg 6:09a0610af8b7 20
igorsk 0:e294af8d0e07 21 int main()
igorsk 0:e294af8d0e07 22 {
mbedevilledEgg 4:c64b742e9388 23 if (MMA.testConnection())
mbedevilledEgg 4:c64b742e9388 24 connectionLed = 1; // Checking MMA connected correctly
mbedevilledEgg 4:c64b742e9388 25
mbedevilledEgg 10:d2dd3b355de5 26 FILE *Accel = fopen("/USB/Accelerometer.csv", "w"); // Opens text file for Accelerometer
mbedevilledEgg 10:d2dd3b355de5 27 FILE *GPS = fopen("/USB/GPS.csv", "w"); // Opens text file for GPS
mbedevilledEgg 10:d2dd3b355de5 28 FILE *Comp = fopen("/USB/Compass.csv", "w"); // Opens text file for Compass
mbedevilledEgg 4:c64b742e9388 29
mbedevilledEgg 7:c08305966384 30 int i;
mbedevilledEgg 14:d70e165ddf30 31 float bearing;
mbedevilledEgg 8:f1679795e9ac 32
mbedevilledEgg 7:c08305966384 33 while(i < LIM)
igorsk 0:e294af8d0e07 34 {
mbedevilledEgg 4:c64b742e9388 35 //Accelerometer
mbedevilledEgg 10:d2dd3b355de5 36 Accel = fopen("/USB/Accelerometer.csv", "a");
mbedevilledEgg 4:c64b742e9388 37 ax=MMA.x();
mbedevilledEgg 4:c64b742e9388 38 ay=MMA.y();
mbedevilledEgg 4:c64b742e9388 39 az=MMA.z();
mbedevilledEgg 20:7e8aa8bbe773 40 fprintf(Accel,"%f, %f, %f\r\n",ax,ay,az);
mbedevilledEgg 4:c64b742e9388 41 lcd.locate(1,21);
mbedevilledEgg 4:c64b742e9388 42 lcd.printf("Accel: %.2f, %.2f, %.2f", ax, ay, az);
mbedevilledEgg 11:c85911a4c956 43
mbedevilledEgg 4:c64b742e9388 44 //GPS
mbedevilledEgg 10:d2dd3b355de5 45 GPS = fopen("/USB/GPS.csv", "a");
mbedevilledEgg 4:c64b742e9388 46 if (gps.sample())
mbedevilledEgg 4:c64b742e9388 47 {
jrmswell 18:0ced1be44292 48 fprintf(GPS, "%f, %f, %.1f\r\n", gps.latitude, gps.longitude, gps.rtime);
mbedevilledEgg 4:c64b742e9388 49 lcd.locate(1,1);
mbedevilledEgg 15:b5b2ca683d64 50 lcd.printf("GPS: %.4f, %.4f, %f", gps.latitude, gps.longitude, gps.rtime);
mbedevilledEgg 4:c64b742e9388 51 }
mbedevilledEgg 4:c64b742e9388 52 else // For no signal
igorsk 0:e294af8d0e07 53 {
mbedevilledEgg 16:30f9a5e6abc2 54 fprintf(GPS, "No Lock!\r\n");
mbedevilledEgg 4:c64b742e9388 55 lcd.locate(1,1);
mbedevilledEgg 4:c64b742e9388 56 lcd.printf("GPS: No Lock!");
igorsk 0:e294af8d0e07 57 }
mbedevilledEgg 11:c85911a4c956 58
mbedevilledEgg 4:c64b742e9388 59 // Compass
mbedevilledEgg 10:d2dd3b355de5 60 Comp = fopen("/USB/Compass.csv", "a");
mbedevilledEgg 8:f1679795e9ac 61 lcd.locate(1,11);
mbedfordshire 21:1990400ca172 62 bearing = (compass.readBearing()/10) - 150; // (150 = predetermined offset for magnetic North)
mbedevilledEgg 14:d70e165ddf30 63 if (bearing < 0)
mbedevilledEgg 14:d70e165ddf30 64 {
mbedevilledEgg 14:d70e165ddf30 65 bearing = 360 + bearing;
mbedevilledEgg 14:d70e165ddf30 66 }
mbedevilledEgg 20:7e8aa8bbe773 67 fprintf(Comp, "%.2f\r\n", bearing);
jrmswell 19:3da2ac9aa081 68 lcd.printf("Bearing: %.2f, \n", bearing);
mbedevilledEgg 14:d70e165ddf30 69
mbedevilledEgg 8:f1679795e9ac 70 i++;
mbedevilledEgg 9:dbb7c4e63d45 71 fclose(Accel);
mbedevilledEgg 11:c85911a4c956 72 fclose(GPS);
mbedevilledEgg 7:c08305966384 73 fclose(Comp);
mbedevilledEgg 9:dbb7c4e63d45 74 }
mbedevilledEgg 6:09a0610af8b7 75 }