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
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
main.cpp.orig@24:ffcfb0d9d490, 2020-09-12 (annotated)
- Committer:
- jrmswell
- Date:
- Sat Sep 12 14:47:28 2020 +0000
- Revision:
- 24:ffcfb0d9d490
Updated to MbedOS5
Who changed what in which revision?
User | Revision | Line number | New 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 | } |