Data logger with SD card storage and RTC

Dependencies:   SDFileSystem SoftSerial ds3231 mbed

Revision:
5:159a0b7172c8
Parent:
4:3b055e2a9f4e
Child:
6:facc3b44ab4e
--- a/main.cpp	Fri Nov 27 10:28:42 2015 +0000
+++ b/main.cpp	Thu Dec 03 10:30:23 2015 +0000
@@ -71,6 +71,7 @@
 int newData=0;
 
 char softBuffer[buffer_size+1];
+char rBuffer[255];
 volatile int rxSoftIn=0;
 volatile int rxSoftOut=0;
 int newSoftData=0;
@@ -80,7 +81,8 @@
 int setM=0;
 int setC=0;
 
-void serial_t0_RxInt(){
+void serial_t0_RxInt()
+{
     while ((serial_t0.readable()) && (((rxSoftIn + 1) % buffer_size) != rxSoftOut)) {
         softBuffer[rxSoftIn] = serial_t0.getc();
         rxSoftIn = (rxSoftIn + 1) % buffer_size;
@@ -99,7 +101,7 @@
 
 
     ///convert to Shijie datagram
-    if(rx_in<14){
+    if(rx_in<14) {
         if(fpgaBuffer[2]!=0xFF) {
             lifeTime = (10 * (fpgaBuffer[0] >> 4)) + (fpgaBuffer[0] & 15)+(((10.0 * (fpgaBuffer[1] >> 4)) + 1.0*(fpgaBuffer[1] & 15))/100.0);
             oTwo = (10 * (fpgaBuffer[2] >> 4)) + (fpgaBuffer[2] & 15)+(((10.0 * (fpgaBuffer[3] >> 4)) + 1.0*(fpgaBuffer[3] & 15))/100.0);
@@ -115,30 +117,30 @@
             ancil = (10 * (fpgaBuffer[12] >> 4)) + (fpgaBuffer[12] & 15)+(((10.0 * (fpgaBuffer[13] >> 4)) + 1.0*(fpgaBuffer[13] & 15))/100.0);
             // DEBUG fpga.printf("%x %x %x %x %x %x %x %x %x %x",fpgaBuffer[0],fpgaBuffer[1],fpgaBuffer[3],fpgaBuffer[4],fpgaBuffer[6],fpgaBuffer[7],fpgaBuffer[9],fpgaBuffer[10],fpgaBuffer[12],fpgaBuffer[13]);
         }
-    }else{
-        
-        if(rx_in<18){
-            
-        label = (256 * (fpgaBuffer[0]))+fpgaBuffer[1];
-        lifeTime = (10 * (fpgaBuffer[2] >> 4)) + (fpgaBuffer[2] & 15)+(((10.0 * (fpgaBuffer[3] >> 4)) + 1.0*(fpgaBuffer[3] & 15))/100.0);
-        oTwo = (10 * (fpgaBuffer[4] >> 4)) + (fpgaBuffer[4] & 15)+(((10.0 * (fpgaBuffer[5] >> 4)) + 1.0*(fpgaBuffer[5] & 15))/100.0);
-        peak = (256 * (fpgaBuffer[6]))+fpgaBuffer[7];
-        trough = (256 * (fpgaBuffer[8]))+fpgaBuffer[9];
-        pressure = (256 * (fpgaBuffer[10]))+fpgaBuffer[11];
-        temperature = (10 * (fpgaBuffer[12] & 15)) + (fpgaBuffer[13] >> 4) + (1.0*(fpgaBuffer[13] & 15)/10 );
-        
-        }else{
-        
-        label = (256 * (fpgaBuffer[0]))+fpgaBuffer[1];
-        lifeTime = (10 * (fpgaBuffer[3] >> 4)) + (fpgaBuffer[3] & 15)+(((10.0 * (fpgaBuffer[4] >> 4)) + 1.0*(fpgaBuffer[4] & 15))/100.0);
-        oTwo = (10 * (fpgaBuffer[6] >> 4)) + (fpgaBuffer[6] & 15)+(((10.0 * (fpgaBuffer[7] >> 4)) + 1.0*(fpgaBuffer[7] & 15))/100.0);
-        peak = (256 * (fpgaBuffer[9]))+fpgaBuffer[10];
-        trough = (256 * (fpgaBuffer[12]))+fpgaBuffer[13];
-        pressure = (256 * (fpgaBuffer[15]))+fpgaBuffer[16];
-        temperature = (10 * (fpgaBuffer[18] & 15)) + (fpgaBuffer[19] >> 4) + (1.0*(fpgaBuffer[19] & 15)/10 );
+    } else {
+
+        if(rx_in<18) {
+
+            label = (256 * (fpgaBuffer[0]))+fpgaBuffer[1];
+            lifeTime = (10 * (fpgaBuffer[2] >> 4)) + (fpgaBuffer[2] & 15)+(((10.0 * (fpgaBuffer[3] >> 4)) + 1.0*(fpgaBuffer[3] & 15))/100.0);
+            oTwo = (10 * (fpgaBuffer[4] >> 4)) + (fpgaBuffer[4] & 15)+(((10.0 * (fpgaBuffer[5] >> 4)) + 1.0*(fpgaBuffer[5] & 15))/100.0);
+            peak = (256 * (fpgaBuffer[6]))+fpgaBuffer[7];
+            trough = (256 * (fpgaBuffer[8]))+fpgaBuffer[9];
+            pressure = (256 * (fpgaBuffer[10]))+fpgaBuffer[11];
+            temperature = (10 * (fpgaBuffer[12] & 15)) + (fpgaBuffer[13] >> 4) + (1.0*(fpgaBuffer[13] & 15)/10 );
+
+        } else {
+
+            label = (256 * (fpgaBuffer[0]))+fpgaBuffer[1];
+            lifeTime = (10 * (fpgaBuffer[3] >> 4)) + (fpgaBuffer[3] & 15)+(((10.0 * (fpgaBuffer[4] >> 4)) + 1.0*(fpgaBuffer[4] & 15))/100.0);
+            oTwo = (10 * (fpgaBuffer[6] >> 4)) + (fpgaBuffer[6] & 15)+(((10.0 * (fpgaBuffer[7] >> 4)) + 1.0*(fpgaBuffer[7] & 15))/100.0);
+            peak = (256 * (fpgaBuffer[9]))+fpgaBuffer[10];
+            trough = (256 * (fpgaBuffer[12]))+fpgaBuffer[13];
+            pressure = (256 * (fpgaBuffer[15]))+fpgaBuffer[16];
+            temperature = (10 * (fpgaBuffer[18] & 15)) + (fpgaBuffer[19] >> 4) + (1.0*(fpgaBuffer[19] & 15)/10 );
         }
     }
-    
+
     newData=1;
     rx_in=0;
     return;
@@ -147,8 +149,10 @@
 char* strings;
 string s1;
 string s2;
+int r;
 int msgCode;
 int msgValue;
+int lineN;
 int main()
 {
     //Comment below to test without RTC and SD
@@ -157,20 +161,21 @@
     button.fall(&bPush);
     button2.mode(PullUp);
     button2.fall(&bPush2);
-    
+
     fpga.attach(&fpga_Rx_interrupt,Serial::RxIrq);
     FILE *fpo = fopen("/sd/d.txt", "r");
     if(fpo == NULL) {
         createFile=1;
     }
-
+    fclose(fpo);
+    
     FILE *fp  = fopen("/sd/d.txt", "a");
     if(fp == NULL) {
         fpga.printf("file system failed\r\n");
     } else {
         fpga.printf("file system active\r\n");
         if(createFile==1) {
-            fprintf(fp, "DateTime,Lifetime,02,Peak,Trough,Ancil\r\n");
+            //fprintf(fp, "DateTime,Lifetime,02,Peak,Trough,Ancil\r\n");
         }
     }
     fclose(fp);
@@ -183,7 +188,7 @@
 
     fpga.baud(9600);
     fpga.printf("start v2 \r\n");
-    
+
     serial_t0.baud(4800);
     serial_t0.printf("start soft serial\r\n");//DEBUG
     serial_t0.attach(&serial_t0_RxInt,SoftSerial::RxIrq);
@@ -192,12 +197,12 @@
     while(1) {
         //serial_t0.printf("looping \r\n");
         //fpga.printf("Im looping too");
-        
+
         myled = 1;
         wait(0.2);
         myled = 0;
         wait(0.2);
-        
+
         ///print data to file
         if(newData==1) {
             sprintf(pbuff,"%f,%f,%f,%f,%f,%f,%f",label,lifeTime,oTwo,peak,trough,pressure,temperature);
@@ -215,42 +220,62 @@
             serial_t0.printf("%s,%s\r\n",tbuff,pbuff);
             fclose(fp);
             newData=0;
-        }  
-        
-        if(newSoftData==1){
+        }
+
+        if(newSoftData==1) {
             rxSoftIn=0;
             newSoftData=0;
-            
+
             //serial_t0.printf(softBuffer);
-            
+
             string str(softBuffer);
-            s1="";
-            s2="";
-            strings = strtok(softBuffer,",");
-            if(strings!=NULL){
-                s1 = strings;
-                strings = strtok(NULL,",");
-                if(strings!=NULL){
-                    s2= strings;
-                    serial_t0.printf("Received code %s, value %s ",s1,s2);
-                    msgCode = atoi(s1.c_str());
-                    if(msgCode==1||msgCode==2||msgCode==3||msgCode==4){
-                        msgValue = atoi(s2.c_str());
-                        softBuffer[0] = msgCode;
-                        softBuffer[1] = msgValue/255; //LSB
-                        softBuffer[2] = msgValue%255; //MSB
-                        softBuffer[3] = '\0';
-                        serial_t0.printf("Relayed datagram: %x %x %x",softBuffer[0],softBuffer[1],softBuffer[2]); //DEBUG
-                        //fpga.printf(softBuffer[0]);fpga.printf(softBuffer[1]);fpga.printf(softBuffer[3]);
-                        fpga.putc(softBuffer[0]);fpga.putc(softBuffer[1]);fpga.putc(softBuffer[2]);///sned the datagram to fpga
-                        
-                    }else if(msgCode==5){
-                        ///Parse date time write to rtc.
+
+            if(softBuffer[0]=='S'&&softBuffer[1]=='D') {
+             FILE *fr  = fopen("/sd/d.txt", "r");
+                if(fr == NULL) {
+                    serial_t0.printf("Could not open file for read");
+                } else {
+                    lineN=0;
+                    while( fgets(rBuffer , 200 , fr) != NULL && !( rBuffer[0]=='D' && lineN==1) ) {
+                        if(rBuffer[0]=='D') {
+                            lineN++;
+                        } else {
+                            serial_t0.printf("%s",rBuffer);
+                            wait(0.040);
+                        }
+                    }
+                }
+            } else {
+
+                s1="";
+                s2="";
+                strings = strtok(softBuffer,",");
+                if(strings!=NULL) {
+                    s1 = strings;
+                    strings = strtok(NULL,",");
+                    if(strings!=NULL) {
+                        s2= strings;
+                        serial_t0.printf("Received code %s, value %s ",s1,s2);
+                        msgCode = atoi(s1.c_str());
+                        if(msgCode==1||msgCode==2||msgCode==3||msgCode==4) {
+                            msgValue = atoi(s2.c_str());
+                            softBuffer[0] = msgCode;
+                            softBuffer[1] = msgValue/255; //LSB
+                            softBuffer[2] = msgValue%255; //MSB
+                            softBuffer[3] = '\0';
+                            serial_t0.printf("Relayed datagram: %x %x %x",softBuffer[0],softBuffer[1],softBuffer[2]); //DEBUG
+                            //fpga.printf(softBuffer[0]);fpga.printf(softBuffer[1]);fpga.printf(softBuffer[3]);
+                            fpga.putc(softBuffer[0]);
+                            fpga.putc(softBuffer[1]);
+                            fpga.putc(softBuffer[2]);///sned the datagram to fpga
+
+                        } else if(msgCode==5) {
+                            ///Parse date time write to rtc.
+                        }
                     }
                 }
             }
             
-            
         }
         
     }