Data logger with SD card storage and RTC
Dependencies: SDFileSystem SoftSerial ds3231 mbed
main.cpp
- Committer:
- dexterg
- Date:
- 2015-09-29
- Revision:
- 0:e0a8ea9b571e
- Child:
- 1:ab74071de2c8
File content as of revision 0:e0a8ea9b571e:
#include "mbed.h" #include "SDFileSystem.h" #include "SoftSerial.h" #include "ds3231.h" DigitalOut externalTrig(P0_17); DigitalOut myled(LED1); //Serial usbPC(P0_19, P0_18); InterruptIn button(P0_23); InterruptIn button2(P0_16); Serial fpga(P0_19, P0_18);//must change to new pins Ds3231 rtc(P0_5, P0_4);///must change to new pins SDFileSystem sd(P0_9, P0_8, P0_10, P0_2, "sd");//must change to new pins float lifeTime = 0; float oTwo = 0; float peak = 0; float trough = 0; float ancil = 0; char tbuff[32]; char pbuff[250]; void bPush() { time_t epoch_time; epoch_time = rtc.get_epoch(); strftime(tbuff, 32, "%Y-%m-%d %H:%M:%S %Z", localtime(&epoch_time)); FILE *fp = fopen("/sd/d.txt", "a"); if(fp == NULL) { } else { fprintf(fp, "%s,%f,%f,%f,%f,%f\r\n",tbuff,lifeTime,oTwo,peak,trough,ancil); } fclose(fp); fpga.printf("lifetime: %f o2: %f peak: %f trough: %f ancil: %f ",lifeTime,oTwo,peak,trough,ancil); } void bPush2() { time_t epoch_time; epoch_time = rtc.get_epoch(); externalTrig=1; wait(0.1); externalTrig=0; //strftime(tbuff, 32, "%X %x", localtime(&epoch_time)); //printf("%s", tbuff); } const int buffer_size = 255; char fpgaBuffer[buffer_size+1]; volatile int rx_in=0; volatile int rx_out=0; int newData=0; void fpga_Rx_interrupt() { wait(0.1); while ((fpga.readable()) && (((rx_in + 1) % buffer_size) != rx_out)) { fpgaBuffer[rx_in] = fpga.getc(); // Uncomment to Echo to USB serial to watch data flow rx_in = (rx_in + 1) % buffer_size; } ///convert to Shijie datagram 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); peak = (256 * (fpgaBuffer[4]))+fpgaBuffer[5]; trough = (256 * (fpgaBuffer[6]))+fpgaBuffer[7]; ancil = (10 * (fpgaBuffer[8] >> 4)) + (fpgaBuffer[8] & 15)+(((10.0 * (fpgaBuffer[9] >> 4)) + 1.0*(fpgaBuffer[9] & 15))/100.0); fpga.printf("%x %x %x %x %x %x %x %x %x %x",fpgaBuffer[0],fpgaBuffer[1],fpgaBuffer[2],fpgaBuffer[3],fpgaBuffer[4],fpgaBuffer[5],fpgaBuffer[6],fpgaBuffer[7],fpgaBuffer[8],fpgaBuffer[9]); } else { lifeTime = (10 * (fpgaBuffer[0] >> 4)) + (fpgaBuffer[0] & 15)+(((10.0 * (fpgaBuffer[1] >> 4)) + 1.0*(fpgaBuffer[1] & 15))/100.0); oTwo = (10 * (fpgaBuffer[3] >> 4)) + (fpgaBuffer[3] & 15)+(((10.0 * (fpgaBuffer[4] >> 4)) + 1.0*(fpgaBuffer[4] & 15))/100.0); peak = (256 * (fpgaBuffer[6]))+fpgaBuffer[7]; trough = (256 * (fpgaBuffer[9]))+fpgaBuffer[10]; ancil = (10 * (fpgaBuffer[12] >> 4)) + (fpgaBuffer[12] & 15)+(((10.0 * (fpgaBuffer[13] >> 4)) + 1.0*(fpgaBuffer[13] & 15))/100.0); 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]); } //fpga.printf("lifetime: %f o2: %f peak: %f trough: %f ancil: %f ",lifeTime,oTwo,peak,trough,ancil); //fpga.printf(fpgaBuffer); //fpga.printf("%x %x %x %x %x %x %x %x %x %x",fpgaBuffer[0],fpgaBuffer[1],fpgaBuffer[2],fpgaBuffer[3],fpgaBuffer[4],fpgaBuffer[5],fpgaBuffer[6],fpgaBuffer[7],fpgaBuffer[8],fpgaBuffer[9]); newData=1; rx_in=0; //fpga.printf("rx received\r\n"); return; } int createFile=0; int main() { externalTrig=0; button.mode(PullUp); button.fall(&bPush); button2.mode(PullUp); button2.fall(&bPush2); fpga.baud(9600); fpga.printf("start"); fpga.attach(&fpga_Rx_interrupt,Serial::RxIrq); FILE *fpo = fopen("/sd/d.txt", "r"); if(fpo == NULL) { createFile=1; } 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"); } } fclose(fp); ds3231_cntl_stat_t rtc_control_status = {1,1}; rtc.set_cntl_stat_reg(rtc_control_status); time_t epoch_time; epoch_time = rtc.get_epoch(); //ds3231_calendar_t rtc_calendar={1,11,8,15}; //fpga.printf("set calendar:%d",rtc.set_calendar(rtc_calendar)); //wait(1); //ds3231_time_t rtc_time={0,26,20,0,0}; //rtc.set_time(rtc_time); while(1) { myled = 1; wait(0.2); myled = 0; wait(0.2); if(newData==1) { //fpga.printf("lifetime: %f o2: %f peak: %f trough: %f ancil: %f ",lifeTime,oTwo,peak,trough,ancil); //sprintf(pbuff,"lifetime: %f o2: %f peak: %f trough: %f ancil: %f ",lifeTime,oTwo,peak,trough,ancil); sprintf(pbuff,"%f, %f, %f, %f, %f",lifeTime,oTwo,peak,trough,ancil); fpga.printf("%s",pbuff); //fpga.printf("Data Rxd\r\n"); time_t epoch_time; epoch_time = rtc.get_epoch(); strftime(tbuff, 32, "%Y-%m-%d %H:%M:%S %Z", localtime(&epoch_time)); FILE *fp = fopen("/sd/d.txt", "a"); if(fp == NULL) { } else { //fprintf(fp, "%s,%f,%f,%f,%f,%f\r\n",tbuff,lifeTime,oTwo,peak,trough,ancil); fprintf(fp, "%s,%s\r\n",tbuff,pbuff); } fclose(fp); newData=0; } //fpga.printf("ee\r\n"); //time_t epoch_time; //epoch_time = rtc.get_epoch(); //fpga.printf("\nTime as seconds since January 1, 1970 = %d\r\n", epoch_time); //fpga.printf("\nTime as a basic string = %s\r\n", ctime(&epoch_time)); //if(fpga.readable()) { // wait(1); //} } }