FBRLogger final version
Dependencies: EthernetInterface MSCAN Nanopb SDFileSystem mbed-rtos mbed
main.cpp@3:32206cf84eb4, 2013-02-17 (annotated)
- 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?
User | Revision | Line number | New 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 | } |