A system to help you ride your bike better than you do right now.

Dependencies:   4DGL-uLCD-SE SDFileSystem mbed LSM9DS1_Library_cal

Committer:
kswanson31
Date:
Sun Dec 04 21:42:06 2016 +0000
Revision:
3:26e0c0d7984f
Parent:
2:d08643ff3c62
Child:
4:1928bf053958
Mostly finished with record storing and recalling

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kswanson31 0:134f49df01f8 1 #include "mbed.h"
kswanson31 0:134f49df01f8 2 #include "SDFileSystem.h"
kswanson31 2:d08643ff3c62 3 #include "uLCD_4DGL.h"
kswanson31 3:26e0c0d7984f 4 #include <fstream>
kswanson31 3:26e0c0d7984f 5 #include <iomanip>
kswanson31 3:26e0c0d7984f 6 using namespace std;
kswanson31 0:134f49df01f8 7
kswanson31 3:26e0c0d7984f 8 #define START_S 1480719111
kswanson31 0:134f49df01f8 9
kswanson31 3:26e0c0d7984f 10 DigitalOut led(LED1);
kswanson31 3:26e0c0d7984f 11 SDFileSystem sd(p11, p12, p13, p14, "sd"); //mosi -> DI, miso <- DO, slck -> sclck, CS -> CS
kswanson31 3:26e0c0d7984f 12 uLCD_4DGL lcd(p28, p27, p29);
kswanson31 0:134f49df01f8 13
kswanson31 3:26e0c0d7984f 14 float miles = 0;
kswanson31 3:26e0c0d7984f 15 float speed = 0;
kswanson31 3:26e0c0d7984f 16 float maxSpeed = 0;
kswanson31 3:26e0c0d7984f 17 time_t seconds;
kswanson31 3:26e0c0d7984f 18
kswanson31 3:26e0c0d7984f 19 void store_trip();
kswanson31 3:26e0c0d7984f 20 void recall_trips();
kswanson31 0:134f49df01f8 21
kswanson31 0:134f49df01f8 22 int main() {
kswanson31 3:26e0c0d7984f 23 set_time(START_S); // Set RTC time
kswanson31 0:134f49df01f8 24
kswanson31 0:134f49df01f8 25 // open the file for reading and appending records
kswanson31 0:134f49df01f8 26 // recall last trip
kswanson31 3:26e0c0d7984f 27 recall_trips();
kswanson31 3:26e0c0d7984f 28 wait(5);
kswanson31 0:134f49df01f8 29 lcd.cls();
kswanson31 0:134f49df01f8 30
kswanson31 0:134f49df01f8 31 // normal operation loop here
kswanson31 3:26e0c0d7984f 32 bool going = true;
kswanson31 3:26e0c0d7984f 33 while(going) {
kswanson31 3:26e0c0d7984f 34 seconds = time(NULL) - START_S; // return the seconds passed since start
kswanson31 2:d08643ff3c62 35
kswanson31 3:26e0c0d7984f 36
kswanson31 3:26e0c0d7984f 37 led = 1;
kswanson31 3:26e0c0d7984f 38 wait(0.5);
kswanson31 3:26e0c0d7984f 39 led = 0;
kswanson31 0:134f49df01f8 40 // check current speed
kswanson31 0:134f49df01f8 41 // check curret distance
kswanson31 0:134f49df01f8 42 // check time so far
kswanson31 0:134f49df01f8 43 // display this on the screen
kswanson31 0:134f49df01f8 44 // check if braking, turning left or right
kswanson31 0:134f49df01f8 45 // show that on the screen
kswanson31 2:d08643ff3c62 46 }
kswanson31 0:134f49df01f8 47
kswanson31 0:134f49df01f8 48 // store this trip
kswanson31 0:134f49df01f8 49 lcd.cls();
kswanson31 3:26e0c0d7984f 50 store_trip();
kswanson31 0:134f49df01f8 51
kswanson31 0:134f49df01f8 52 // end everything
kswanson31 0:134f49df01f8 53 }
kswanson31 0:134f49df01f8 54
kswanson31 3:26e0c0d7984f 55 void recall_trips(void) {
kswanson31 0:134f49df01f8 56 // display the most recent trip made on the screen
kswanson31 0:134f49df01f8 57 // display the most impressive trip (longest distance, best speed, least time)
kswanson31 0:134f49df01f8 58
kswanson31 3:26e0c0d7984f 59 float f_miles;
kswanson31 3:26e0c0d7984f 60 float f_maxSpeed;
kswanson31 3:26e0c0d7984f 61 float f_hours;
kswanson31 3:26e0c0d7984f 62 ifstream file;
kswanson31 0:134f49df01f8 63
kswanson31 1:9d3f2e86392e 64 // read out the most recent trip
kswanson31 3:26e0c0d7984f 65 file.open("/sd/records/recent.txt");
kswanson31 1:9d3f2e86392e 66
kswanson31 3:26e0c0d7984f 67 if (!file.is_open()) {
kswanson31 1:9d3f2e86392e 68 lcd.locate(0, 1);
kswanson31 3:26e0c0d7984f 69 lcd.printf("Could not open file\n");
kswanson31 1:9d3f2e86392e 70 } else {
kswanson31 3:26e0c0d7984f 71 file >> f_miles >> f_maxSpeed >> f_hours;
kswanson31 1:9d3f2e86392e 72 lcd.locate(0, 1);
kswanson31 3:26e0c0d7984f 73 lcd.printf("Your last trip\n\n");
kswanson31 3:26e0c0d7984f 74 lcd.printf("Distance : %3.1f\n\n", f_miles);
kswanson31 3:26e0c0d7984f 75 lcd.printf("Top speed : %2.1f\n\n", f_maxSpeed);
kswanson31 3:26e0c0d7984f 76 lcd.printf("Time : %1.1f\n\n", f_hours);
kswanson31 1:9d3f2e86392e 77 }
kswanson31 1:9d3f2e86392e 78
kswanson31 3:26e0c0d7984f 79 file.close();
kswanson31 3:26e0c0d7984f 80 wait(0.5);
kswanson31 3:26e0c0d7984f 81
kswanson31 3:26e0c0d7984f 82 // display the best trip
kswanson31 3:26e0c0d7984f 83
kswanson31 3:26e0c0d7984f 84 file.open("/sd/records/best-of.txt");
kswanson31 3:26e0c0d7984f 85
kswanson31 3:26e0c0d7984f 86 if(!file.is_open()) {
kswanson31 3:26e0c0d7984f 87 lcd.printf("Could not open file\n");
kswanson31 3:26e0c0d7984f 88 } else {
kswanson31 3:26e0c0d7984f 89 // show the best trip
kswanson31 3:26e0c0d7984f 90 file >> f_miles >> f_maxSpeed >> f_hours;
kswanson31 3:26e0c0d7984f 91 lcd.printf("Your best trip\n\n");
kswanson31 3:26e0c0d7984f 92 lcd.printf("Distance : %3.1f\n\n", f_miles);
kswanson31 3:26e0c0d7984f 93 lcd.printf("Top speed : %2.1f\n\n", f_maxSpeed);
kswanson31 3:26e0c0d7984f 94 lcd.printf("Time : %1.1f\n\n", f_hours);
kswanson31 3:26e0c0d7984f 95 }
kswanson31 3:26e0c0d7984f 96
kswanson31 3:26e0c0d7984f 97 file.close();
kswanson31 3:26e0c0d7984f 98 wait(0.5);
kswanson31 3:26e0c0d7984f 99 }
kswanson31 1:9d3f2e86392e 100
kswanson31 3:26e0c0d7984f 101 void store_trip(void) {
kswanson31 3:26e0c0d7984f 102 // store the most recent trip completed
kswanson31 3:26e0c0d7984f 103 // determine whether this trip was a record, and indicate if so
kswanson31 3:26e0c0d7984f 104
kswanson31 3:26e0c0d7984f 105 float hours;
kswanson31 3:26e0c0d7984f 106 fstream file;
kswanson31 3:26e0c0d7984f 107
kswanson31 3:26e0c0d7984f 108 file.open("/sd/records/recent.txt");
kswanson31 3:26e0c0d7984f 109
kswanson31 3:26e0c0d7984f 110 if (!file.is_open()) {
kswanson31 3:26e0c0d7984f 111 lcd.locate(0, 1);
kswanson31 3:26e0c0d7984f 112 lcd.printf("Could not open file\n");
kswanson31 3:26e0c0d7984f 113 } else {
kswanson31 3:26e0c0d7984f 114 hours = (float)seconds / 3600;
kswanson31 0:134f49df01f8 115 lcd.locate(0, 1);
kswanson31 3:26e0c0d7984f 116 lcd.printf("This trip\n\n");
kswanson31 3:26e0c0d7984f 117 lcd.printf("Distance : %3.1f\n\n", miles);
kswanson31 3:26e0c0d7984f 118 lcd.printf("Top speed : %2.1f\n\n", maxSpeed);
kswanson31 3:26e0c0d7984f 119 lcd.printf("Time : %1.1f\n\n", hours);
kswanson31 3:26e0c0d7984f 120 // overwrite most recent
kswanson31 3:26e0c0d7984f 121 file << fixed << setprecision(1) << miles << " " << maxSpeed << " " << hours << endl;
kswanson31 3:26e0c0d7984f 122 }
kswanson31 3:26e0c0d7984f 123
kswanson31 3:26e0c0d7984f 124 file.close();
kswanson31 3:26e0c0d7984f 125 wait(0.5);
kswanson31 3:26e0c0d7984f 126
kswanson31 3:26e0c0d7984f 127 file.open("/sd/records/best-of.txt");
kswanson31 3:26e0c0d7984f 128
kswanson31 3:26e0c0d7984f 129 if (!file.is_open()) {
kswanson31 3:26e0c0d7984f 130 lcd.locate(0, 1);
kswanson31 3:26e0c0d7984f 131 lcd.printf("Could not open file\n");
kswanson31 0:134f49df01f8 132 } else {
kswanson31 0:134f49df01f8 133 lcd.locate(0, 1);
kswanson31 3:26e0c0d7984f 134 // check if you beat your best
kswanson31 0:134f49df01f8 135 }
kswanson31 3:26e0c0d7984f 136
kswanson31 3:26e0c0d7984f 137 file.close();
kswanson31 0:134f49df01f8 138 }