A system to help you ride your bike better than you do right now.
Dependencies: 4DGL-uLCD-SE SDFileSystem mbed LSM9DS1_Library_cal
main.cpp@3:26e0c0d7984f, 2016-12-04 (annotated)
- 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?
User | Revision | Line number | New 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 | } |