John Leimgruber / Mbed 2 deprecated TempDataLogger

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
leimgrub
Date:
Mon Jan 04 17:34:17 2010 +0000
Commit message:

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r b7581833f14a main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Jan 04 17:34:17 2010 +0000
@@ -0,0 +1,90 @@
+#include "mbed.h"
+
+/***************************
+* John W. Leimgruber III
+* Test Application
+* 1. Read analog value from LM34 temperature sensor and convert to deg Fahrenheit
+* 2. Filter using 3-tap median sampling every 1/3 second
+* 3. Append to local flash filesystem log file every 512 seconds
+* 4. Externally, use a python program I wrote based on matplotlib to grab and parse updated log file then display graphical plot
+*****************************/
+
+DigitalOut myled(LED1); // sanity test light
+Serial pc(USBTX, USBRX); // beautiful debugging tx, rx to Linux and Minicom @ /dev/ttyACM0 9600 8N1
+AnalogIn temp(p15);    // analog temperature sensor, LM34, reads +5 to +300 degF @ 10mv per deg and takes 5-30v Vin...
+
+LocalFileSystem local("local"); // setup local filesystem on the ~2mb internal flash
+Timer timer; // timer to generate delays, as I'm newbish and don't know about wait
+
+int main() 
+{
+    printf("Starting to read and log temperature data to local flash disk.\r\n"); 
+    char *tempData, filter[3];
+    unsigned int dataCount, filterCount;
+    FILE *fp = 0;
+    dataCount = 0;
+    filterCount = 0;
+    memset(filter, 3, 0x00);
+
+    // allocate 512 bytes of memory to store 512 seconds worth of temperature values at one per second stored in deg F [0,255]      
+    tempData=(char *) malloc(512);
+    if (!tempData)
+    {
+      fprintf(stderr, "Not enough memory to allocate 512 bytes for temperature data\n");
+      exit(1);
+    }
+
+    timer.reset();
+    timer.start();
+    while(1)
+    {    
+      //grab a temp reading ever second and convert to 0-255 in deg F
+      if(timer.read() > 0.333)
+      { // implement 3 tap median filter and oversample by 3x
+        filter[0] = filter[1];
+        filter[1] = filter[2];
+        filter[2] = (char) (temp.read() * 330.0 - 5.0);
+        filterCount++;
+
+        if(filterCount >= 3)
+        {
+          filterCount = 0;
+          if(filter[0] >= filter[1] && filter[0] <= filter[2] ||
+             filter[0] <= filter[1] && filter[0] >= filter[2])
+          {
+            tempData[dataCount] = filter[0];
+          }
+          else if(filter[1] >= filter[0] && filter[1] <= filter[2] ||
+                  filter[1] <= filter[0] && filter[1] >= filter[2])
+          {
+            tempData[dataCount] = filter[1];
+          }
+          else
+          {
+            tempData[dataCount] = filter[2];
+          }
+          // in case you want to grab some 'real-time' temp data and debugging...                 
+          printf("Temperature [%d] = %d deg F\r\n",dataCount, tempData[dataCount]);
+          dataCount++;
+        }
+        timer.reset();
+      }
+
+      // now that we've grabbed a full page of data, dump it do disk then start over...
+      if(dataCount >= 512)
+      {
+        myled = 1;
+        fp = fopen("/local/templog.dat", "ab");
+        if(!fp)
+        {
+          printf("File /local/templog.dat could not be opened for append binary writing!\r\n");
+          exit(1);
+        }
+        printf("Writing %d bytes to internal flash!\r\n", dataCount); // should always be 512 bytes? (maybe should keep writing until 512 hit... meh)
+        printf("Actually wrote %d bytes...\r\n", fwrite(tempData,1,dataCount,fp)); //memory array, sizeof(char), 512 bytes, file pointer
+        fclose(fp);
+        dataCount = 0;
+        myled = 0;
+      }
+    }
+}
diff -r 000000000000 -r b7581833f14a mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Mon Jan 04 17:34:17 2010 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/49a220cc26e0