Data logger with SD card storage and RTC
Dependencies: SDFileSystem SoftSerial ds3231 mbed
Diff: main.cpp
- 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. + } } } } - } }