PM and CO sensor log data

Dependencies:   Pulse SDFileSystem mbed

Committer:
dinesh4619
Date:
Sat Dec 27 20:34:34 2014 +0000
Revision:
0:5564c47f0add
test code ARM IoT contest-accs

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dinesh4619 0:5564c47f0add 1 #include "mbed.h"
dinesh4619 0:5564c47f0add 2 #include "Pulse.h"
dinesh4619 0:5564c47f0add 3 #include "SDFileSystem.h"
dinesh4619 0:5564c47f0add 4
dinesh4619 0:5564c47f0add 5 //SDFileSystem sd(PTD2, PTD3, PTD1, PTD0, "sd"); // the pinout on the mbed Cool Components workshop board
dinesh4619 0:5564c47f0add 6 SDFileSystem sd(p5, p6, p7, p26, "sd");
dinesh4619 0:5564c47f0add 7
dinesh4619 0:5564c47f0add 8 AnalogIn sense(p15);
dinesh4619 0:5564c47f0add 9 PulseInOut pulse1(p8);
dinesh4619 0:5564c47f0add 10 DigitalOut output1(LED1);
dinesh4619 0:5564c47f0add 11 Serial pc(USBTX, USBRX);
dinesh4619 0:5564c47f0add 12
dinesh4619 0:5564c47f0add 13
dinesh4619 0:5564c47f0add 14 //pc.baud(9600);
dinesh4619 0:5564c47f0add 15 //Serial async_port(PTA2,PTA1);
dinesh4619 0:5564c47f0add 16
dinesh4619 0:5564c47f0add 17 unsigned long duration;
dinesh4619 0:5564c47f0add 18 unsigned long starttime;
dinesh4619 0:5564c47f0add 19 unsigned long sampletime_ms = 30000;//sampe 30s ;
dinesh4619 0:5564c47f0add 20 unsigned long lowpulseoccupancy = 0;
dinesh4619 0:5564c47f0add 21 float ratio = 0;
dinesh4619 0:5564c47f0add 22 float concentration = 0;
dinesh4619 0:5564c47f0add 23
dinesh4619 0:5564c47f0add 24 Timer t1; // define timer object
dinesh4619 0:5564c47f0add 25 void task1(void); // task function prototype
dinesh4619 0:5564c47f0add 26
dinesh4619 0:5564c47f0add 27 int main()
dinesh4619 0:5564c47f0add 28 {
dinesh4619 0:5564c47f0add 29 mkdir("/sd/mydir", 0777);
dinesh4619 0:5564c47f0add 30 t1.start(); // start timer counting
dinesh4619 0:5564c47f0add 31 starttime=t1.read_ms();
dinesh4619 0:5564c47f0add 32 while(1) {
dinesh4619 0:5564c47f0add 33 duration=pulse1.read_low_us();
dinesh4619 0:5564c47f0add 34 lowpulseoccupancy = lowpulseoccupancy+duration;
dinesh4619 0:5564c47f0add 35 if ((t1.read_ms()-starttime) > sampletime_ms) // read time in ms
dinesh4619 0:5564c47f0add 36 {
dinesh4619 0:5564c47f0add 37 pc.printf("Sensor value: %f \n\r", sense.read());
dinesh4619 0:5564c47f0add 38 pc.printf("Before Task\n\r");
dinesh4619 0:5564c47f0add 39 pc.printf("\n Duration=%lu,Low Pulse Occupancy=%lu,starttime=%lu\n\r",duration,lowpulseoccupancy,starttime);
dinesh4619 0:5564c47f0add 40 task1(); // call task function
dinesh4619 0:5564c47f0add 41 FILE *fp = fopen("/sd/mydir/sdtest.txt", "a+");
dinesh4619 0:5564c47f0add 42 if(fp == NULL) {
dinesh4619 0:5564c47f0add 43 error("Could not open file for write\n");
dinesh4619 0:5564c47f0add 44 }
dinesh4619 0:5564c47f0add 45 fprintf(fp, "Sensor value:%f,Low Pulse Occupancy=%lu,Time: %lu",sense.read(),lowpulseoccupancy,starttime);
dinesh4619 0:5564c47f0add 46 //pc.printf("\n Sensor value:%f",sense.read());
dinesh4619 0:5564c47f0add 47 fclose(fp);
dinesh4619 0:5564c47f0add 48 lowpulseoccupancy = 0;
dinesh4619 0:5564c47f0add 49
dinesh4619 0:5564c47f0add 50 }
dinesh4619 0:5564c47f0add 51 }
dinesh4619 0:5564c47f0add 52 }
dinesh4619 0:5564c47f0add 53 void task1(void)
dinesh4619 0:5564c47f0add 54 {
dinesh4619 0:5564c47f0add 55 ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100
dinesh4619 0:5564c47f0add 56 concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // using spec sheet curve
dinesh4619 0:5564c47f0add 57 pc.printf("After Task\n\r");
dinesh4619 0:5564c47f0add 58 pc.printf("\n Low pulse occupancy=%lu",lowpulseoccupancy);
dinesh4619 0:5564c47f0add 59 pc.printf(",");
dinesh4619 0:5564c47f0add 60 pc.printf("Ratio=%f",ratio);
dinesh4619 0:5564c47f0add 61 pc.printf(",");
dinesh4619 0:5564c47f0add 62 pc.printf("Concentration=%f\n\r",concentration);
dinesh4619 0:5564c47f0add 63
dinesh4619 0:5564c47f0add 64 starttime = t1.read_ms();
dinesh4619 0:5564c47f0add 65 output1=!output1; // toggle output
dinesh4619 0:5564c47f0add 66
dinesh4619 0:5564c47f0add 67 }