FBRLogger final version

Dependencies:   EthernetInterface MSCAN Nanopb SDFileSystem mbed-rtos mbed

Files at this revision

API Documentation at this revision

Comitter:
intrinseca
Date:
Sun Feb 17 19:19:19 2013 +0000
Parent:
2:2400fab06b33
Child:
4:66928695da01
Commit message:
Merge in Vesko's analog logging output

Changed in this revision

MSCAN.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/MSCAN.lib	Sun Feb 17 18:59:30 2013 +0000
+++ b/MSCAN.lib	Sun Feb 17 19:19:19 2013 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/intrinseca/code/MSCAN/#0abff05153a1
+http://mbed.org/users/intrinseca/code/MSCAN/#b7fc317e0183
--- a/main.cpp	Sun Feb 17 18:59:30 2013 +0000
+++ b/main.cpp	Sun Feb 17 19:19:19 2013 +0000
@@ -2,14 +2,18 @@
 #include "CANComms.h"
 #include "State.h"
 #include <stdint.h>
+#include <fstream>
+#include <iomanip>
+
+#define LOGGING_INTERVAL    0.1
+#define ANALOG_SCALE        3.3
 
 State car;
 CANComms* can;
 
 SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board
 
-AnalogIn accX(p19);
-AnalogIn accY(p20);
+AnalogIn analogInputs[] = {p15, p16, p17, p18, p19, p20};
 
 Ticker sample;
 
@@ -18,31 +22,9 @@
 void writeLog_string(const char *data);
 void writeLog_data(const char *data, unsigned char length);
 
-void writeLog_string(const char *data)
-{
-    writeLog_data(data, strlen(data));
-}
-
-void writeLog_data(const char *data, unsigned char length)
-{
-    /*FILE *logFile;
-    
-    logFile = fopen(&logFileName[0], "a");
-    
-    if(logFile == NULL)
-    {
-        error("Could not open file for write\n");
-    }
-    
-    fwrite(data, 1,  length, logFile);
-    
-    fclose(logFile);*/
-}
-
 bool file_exists(const char * filename)
 {
-    if (FILE * file = fopen(filename, "r"))
-    {
+    if (FILE * file = fopen(filename, "r")) {
         fclose(file);
         return true;
     }
@@ -51,38 +33,46 @@
 
 void take_sample()
 {
-    float x;
-    float y;
+    ofstream out;
+
+    float value;
+
+    out.open(logFileName);
+
+    // Write the Analog Sensors
+    for(int i = 0; i < 6; i++) {
+        value = analogInputs[i].read() * ANALOG_SCALE;
+        out << setw(10) << value << ",";
+    }
+
+    //Write the ECU data (in binary form)
+    out.write(reinterpret_cast<char*>(&car), sizeof(State));
     
-    x = accX.read();
-    y = accY.read();
-    
-    printf("X: %4.3f Y:%4.3f\n", x, y);
+    out << endl;
+    out.close();
 }
 
-int main() {
+int main()
+{
     char logIndex = 0;
-    
+
     printf("FBR CAN Data Logger\n");
 
     mkdir("/sd/fbr", 0777);
-    
-    do
-    {
+
+    do {
         sprintf(&logFileName[0], "/sd/fbr/log.%d", logIndex);
         logIndex++;
     } while(file_exists(&logFileName[0]));
-        
+
     printf("Log File: %s\n", &logFileName[0]);
-    
+
     printf("Listening Started\n");
-    
-    can = CANComms(&car);
 
-    sample.attach(&take_sample, 0.5);
+    can = new CANComms(&car, true, LOGGING_INTERVAL);
+    sample.attach(&take_sample, LOGGING_INTERVAL);
 
-    while(true)
-    {
+    while(true) {
         __wfi();
     }
-}   
+}