![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Program to take input from sensors for near space research project. Program outputs temperature and sensor id into a .txt file stored in an sd card. ExtendedTimer is used instead of Timer.
Dependencies: DS1820 ExtendedTimer SDFileSystem mbed
Diff: main.cpp
- Revision:
- 0:da5b15595769
- Child:
- 1:a036633bc3c2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Apr 17 19:09:35 2017 +0000 @@ -0,0 +1,166 @@ +/* + SD pins: DI = p5, DO = p6, SCK = p7, CS = p8 +*/ + + +#define MULTIPLE_PROBES +#define ARM1_DATA_PIN p19 +#define TAIL_DATA_PIN p20 +#define ARM2_DATA_PIN p30 + +#include "mbed.h" +#include "DS1820.h" +#include "ExtendedTimer.h" +#include "SDFileSystem.h" + +#define MAX_PROBES 45 + + +DS1820* probe1[20]; +DS1820* probe2[20]; +DS1820* probeTail[20]; +SDFileSystem fs(p5, p6, p7, p8, "fs"); +Serial pc(USBTX,USBRX); + + +int main() +{ + float lastFlush = 0; + float flushInterval = 5*60; + float lastMeasurement = 0; + float measurementInterval = 30; + + // Mount the filesystem + bool mountFailure = fs.mount(); + if (mountFailure != 0) { + pc.printf("Mount failure!\r\n"); + return -1; // ends program with error status + } + pc.printf("Mount success!\r\n"); + + //File for arm 1 data + FILE * output1; + //file for arm 2 data + FILE* output2; + //file for tail data + FILE* outputt; + + output1 = fopen("/fs/Arm1.txt", "a"); + output2 = fopen("/fs/Arm2.txt", "a"); + outputt = fopen("/fs/Tail.txt", "a"); + + ExtendedTimer t; + //start the timer + t.start(); + +//Find Arm1 Probes + // Initialize the probe array to DS1820 objects + int num_devices1 = 0; + //Iterator for stepping through name[] + //int count = 0; + pc.printf("Searching on arm 1...\r\n"); + while(DS1820::unassignedProbe(ARM1_DATA_PIN)) { + probe1[num_devices1] = new DS1820(ARM1_DATA_PIN); + num_devices1++; + //count ++; + if (num_devices1 == MAX_PROBES) + break; + } + pc.printf("Found %d device(s)\r\n\n", num_devices1); + + pc.printf("Searching on arm 2...\r\n"); + //Find Arm2 Probes + // Initialize the probe array to DS1820 objects + int num_devices2 = 0; + //Iterator for stepping through name[] + //int count = 0; + while(DS1820::unassignedProbe(ARM2_DATA_PIN)) { + probe2[num_devices2] = new DS1820(ARM2_DATA_PIN); + num_devices2++; + //count ++; + if (num_devices2 == MAX_PROBES) + break; + } + pc.printf("Found %d device(s)\r\n\n", num_devices2); + + pc.printf("Searching on tail...\r\n"); + //Find Tail Probes + // Initialize the probe array to DS1820 objects + int num_devicest = 0; + //Iterator for stepping through name[] + //int count = 0; + while(DS1820::unassignedProbe(TAIL_DATA_PIN)) { + probeTail[num_devicest] = new DS1820(TAIL_DATA_PIN); + num_devicest++; + //count ++; + if (num_devicest == MAX_PROBES) + break; + } + pc.printf("Found %d device(s)\r\n\n", num_devicest); + + // Write header row to each file with device IDs + //tail + fprintf(outputt,"Time\t"); + for(int count = 0; count < num_devicest; count ++) { + fprintf(outputt, "%x\t", probeTail[count]); + } + //Arm1 + fprintf(output1,"Time\t"); + for(int count = 0; count < num_devices1; count++) { + fprintf(output1, "%x\t", probe1[count]); + } + fprintf(output2,"Time\t"); + //Arm2 + for(int count = 0; count < num_devices2; count++) { + fprintf(output2, "%x\t", probe2[count]); + } + fprintf(outputt,"\r\n"); + fprintf(output1,"\r\n"); + fprintf(output2,"\r\n"); + + //start collecting data + + while(t.read()<4*60*60) { + //conditional statement to trigger sensor readings + if ((t.read()-lastMeasurement)>measurementInterval) { + lastMeasurement = t.read(); + //Tail sensors being read + probeTail[0]->convertTemperature(true, DS1820::all_devices); //Start temperature conversion, wait until ready + fprintf(outputt,"%3.1f \t",t.read()); + for(int i = 0; i < num_devicest; i++) { + fprintf(outputt,"%3.1f \t",probeTail[i]->temperature()); + } + probe1[0]->convertTemperature(true, DS1820::all_devices); + fprintf(output1,"%3.1f \t",t.read()); + for(int i = 0; i < num_devices1; i++) { + fprintf(output1,"%3.1f \t",probe1[i]->temperature()); + } + probe2[0]->convertTemperature(true, DS1820::all_devices); + fprintf(output2,"%3.1f \t",t.read()); + for(int i = 0; i < num_devices2; i++) { + fprintf(output2,"%3.1f \t",probe2[i]->temperature()); + } + fprintf(outputt,"\r\n"); + fprintf(output1,"\r\n"); + fprintf(output2,"\r\n"); + } + + if((t.read()-lastFlush)>flushInterval) { + lastFlush = t.read(); + pc.printf("Wrote block of data at %3.1f s after power-up\r\n",lastFlush); + fclose(outputt); + fclose(output1); + fclose(output2); + output1 = fopen("/fs/Arm1.txt", "a"); + output2 = fopen("/fs/Arm2.txt", "a"); + outputt = fopen("/fs/Tail.txt", "a"); + } + //fprintf(output, "Device %d returns %3.1fo\r\n", i, probe[i]->temperature()); + //flushing io buffer + + } + fclose(outputt); + fclose(output1); + fclose(output2); + fs.unmount(); +}