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
Updated to MbedOS5

Who changed what in which revision?

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