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

Committer:
kswanson31
Date:
2016-12-04
Revision:
3:26e0c0d7984f
Parent:
2:d08643ff3c62
Child:
4:1928bf053958

File content as of revision 3:26e0c0d7984f:

#include "mbed.h"
#include "SDFileSystem.h"
#include "uLCD_4DGL.h"
#include <fstream>
#include <iomanip>
using namespace std;

#define START_S 1480719111

DigitalOut led(LED1);
SDFileSystem sd(p11, p12, p13, p14, "sd");  //mosi -> DI, miso <- DO, slck -> sclck, CS -> CS
uLCD_4DGL lcd(p28, p27, p29);

float miles = 0;
float speed = 0;
float maxSpeed = 0;
time_t seconds;

void store_trip();
void recall_trips();

int main() {
    set_time(START_S);  // Set RTC time
    
    // open the file for reading and appending records
    // recall last trip
    recall_trips();
    wait(5);
    lcd.cls();
    
    // normal operation loop here
    bool going = true;
    while(going) {
        seconds = time(NULL) - START_S; // return the seconds passed since start
        
        
        led = 1;
        wait(0.5);
        led = 0;
    // check current speed
    // check curret distance
    // check time so far
    // display this on the screen
    // check if braking, turning left or right
    // show that on the screen
    }
    
    // store this trip
    lcd.cls();
    store_trip();
    
    // end everything
}

void recall_trips(void) {
    // display the most recent trip made on the screen
    // display the most impressive trip (longest distance, best speed, least time)
    
    float f_miles;
    float f_maxSpeed;
    float f_hours;
    ifstream file;
    
    // read out the most recent trip
    file.open("/sd/records/recent.txt");
    
    if (!file.is_open()) {
        lcd.locate(0, 1);
        lcd.printf("Could not open file\n");
    } else {
        file >> f_miles >> f_maxSpeed >> f_hours;
        lcd.locate(0, 1);
        lcd.printf("Your last trip\n\n");
        lcd.printf("Distance : %3.1f\n\n", f_miles);
        lcd.printf("Top speed : %2.1f\n\n", f_maxSpeed);
        lcd.printf("Time : %1.1f\n\n", f_hours);
    }
    
    file.close();
    wait(0.5);
    
    // display the best trip
    
    file.open("/sd/records/best-of.txt");

    if(!file.is_open()) {
        lcd.printf("Could not open file\n");
    } else {
        // show the best trip
        file >> f_miles >> f_maxSpeed >> f_hours;
        lcd.printf("Your best trip\n\n");
        lcd.printf("Distance : %3.1f\n\n", f_miles);
        lcd.printf("Top speed : %2.1f\n\n", f_maxSpeed);
        lcd.printf("Time : %1.1f\n\n", f_hours);
    }

    file.close();
    wait(0.5);
}

void store_trip(void) {
    // store the most recent trip completed
    // determine whether this trip was a record, and indicate if so
    
    float hours;
    fstream file;
    
    file.open("/sd/records/recent.txt");
    
    if (!file.is_open()) {
        lcd.locate(0, 1);
        lcd.printf("Could not open file\n");
    } else {
        hours = (float)seconds / 3600;
        lcd.locate(0, 1);
        lcd.printf("This trip\n\n");
        lcd.printf("Distance : %3.1f\n\n", miles);
        lcd.printf("Top speed : %2.1f\n\n", maxSpeed);
        lcd.printf("Time : %1.1f\n\n", hours);
        // overwrite most recent
        file << fixed << setprecision(1) << miles << " " << maxSpeed << " " << hours << endl;
    }
    
    file.close();
    wait(0.5);
    
    file.open("/sd/records/best-of.txt");
    
    if (!file.is_open()) {
        lcd.locate(0, 1);
        lcd.printf("Could not open file\n");
    } else {
        lcd.locate(0, 1);
        // check if you beat your best
    }
    
    file.close();
}