FBRLogger final version

Dependencies:   EthernetInterface MSCAN Nanopb SDFileSystem mbed-rtos mbed

Committer:
intrinseca
Date:
Sun Feb 17 19:19:19 2013 +0000
Revision:
3:32206cf84eb4
Parent:
2:2400fab06b33
Child:
4:66928695da01
Merge in Vesko's analog logging output

Who changed what in which revision?

UserRevisionLine numberNew contents of line
intrinseca 1:5f51069d5e09 1 #include "SDHCFileSystem.h"
intrinseca 2:2400fab06b33 2 #include "CANComms.h"
intrinseca 2:2400fab06b33 3 #include "State.h"
intrinseca 1:5f51069d5e09 4 #include <stdint.h>
intrinseca 3:32206cf84eb4 5 #include <fstream>
intrinseca 3:32206cf84eb4 6 #include <iomanip>
intrinseca 3:32206cf84eb4 7
intrinseca 3:32206cf84eb4 8 #define LOGGING_INTERVAL 0.1
intrinseca 3:32206cf84eb4 9 #define ANALOG_SCALE 3.3
intrinseca 1:5f51069d5e09 10
intrinseca 2:2400fab06b33 11 State car;
intrinseca 2:2400fab06b33 12 CANComms* can;
intrinseca 2:2400fab06b33 13
intrinseca 2:2400fab06b33 14 SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board
intrinseca 2:2400fab06b33 15
intrinseca 3:32206cf84eb4 16 AnalogIn analogInputs[] = {p15, p16, p17, p18, p19, p20};
intrinseca 2:2400fab06b33 17
intrinseca 2:2400fab06b33 18 Ticker sample;
intrinseca 1:5f51069d5e09 19
intrinseca 1:5f51069d5e09 20 char logFileName[50];
intrinseca 1:5f51069d5e09 21
intrinseca 1:5f51069d5e09 22 void writeLog_string(const char *data);
intrinseca 1:5f51069d5e09 23 void writeLog_data(const char *data, unsigned char length);
intrinseca 1:5f51069d5e09 24
intrinseca 1:5f51069d5e09 25 bool file_exists(const char * filename)
intrinseca 1:5f51069d5e09 26 {
intrinseca 3:32206cf84eb4 27 if (FILE * file = fopen(filename, "r")) {
intrinseca 1:5f51069d5e09 28 fclose(file);
intrinseca 1:5f51069d5e09 29 return true;
intrinseca 1:5f51069d5e09 30 }
intrinseca 1:5f51069d5e09 31 return false;
intrinseca 1:5f51069d5e09 32 }
intrinseca 1:5f51069d5e09 33
intrinseca 2:2400fab06b33 34 void take_sample()
intrinseca 2:2400fab06b33 35 {
intrinseca 3:32206cf84eb4 36 ofstream out;
intrinseca 3:32206cf84eb4 37
intrinseca 3:32206cf84eb4 38 float value;
intrinseca 3:32206cf84eb4 39
intrinseca 3:32206cf84eb4 40 out.open(logFileName);
intrinseca 3:32206cf84eb4 41
intrinseca 3:32206cf84eb4 42 // Write the Analog Sensors
intrinseca 3:32206cf84eb4 43 for(int i = 0; i < 6; i++) {
intrinseca 3:32206cf84eb4 44 value = analogInputs[i].read() * ANALOG_SCALE;
intrinseca 3:32206cf84eb4 45 out << setw(10) << value << ",";
intrinseca 3:32206cf84eb4 46 }
intrinseca 3:32206cf84eb4 47
intrinseca 3:32206cf84eb4 48 //Write the ECU data (in binary form)
intrinseca 3:32206cf84eb4 49 out.write(reinterpret_cast<char*>(&car), sizeof(State));
intrinseca 2:2400fab06b33 50
intrinseca 3:32206cf84eb4 51 out << endl;
intrinseca 3:32206cf84eb4 52 out.close();
intrinseca 2:2400fab06b33 53 }
intrinseca 2:2400fab06b33 54
intrinseca 3:32206cf84eb4 55 int main()
intrinseca 3:32206cf84eb4 56 {
intrinseca 1:5f51069d5e09 57 char logIndex = 0;
intrinseca 3:32206cf84eb4 58
intrinseca 1:5f51069d5e09 59 printf("FBR CAN Data Logger\n");
intrinseca 1:5f51069d5e09 60
intrinseca 2:2400fab06b33 61 mkdir("/sd/fbr", 0777);
intrinseca 3:32206cf84eb4 62
intrinseca 3:32206cf84eb4 63 do {
intrinseca 1:5f51069d5e09 64 sprintf(&logFileName[0], "/sd/fbr/log.%d", logIndex);
intrinseca 1:5f51069d5e09 65 logIndex++;
intrinseca 1:5f51069d5e09 66 } while(file_exists(&logFileName[0]));
intrinseca 3:32206cf84eb4 67
intrinseca 2:2400fab06b33 68 printf("Log File: %s\n", &logFileName[0]);
intrinseca 3:32206cf84eb4 69
intrinseca 1:5f51069d5e09 70 printf("Listening Started\n");
intrinseca 1:5f51069d5e09 71
intrinseca 3:32206cf84eb4 72 can = new CANComms(&car, true, LOGGING_INTERVAL);
intrinseca 3:32206cf84eb4 73 sample.attach(&take_sample, LOGGING_INTERVAL);
intrinseca 1:5f51069d5e09 74
intrinseca 3:32206cf84eb4 75 while(true) {
intrinseca 1:5f51069d5e09 76 __wfi();
intrinseca 1:5f51069d5e09 77 }
intrinseca 3:32206cf84eb4 78 }