Thermal wake pod program

Dependencies:   DS1820 ExtendedTimer SDFileSystem mbed

Fork of FindingTemp by Julia Abbott

Committer:
jabbott19
Date:
Mon Apr 17 19:09:35 2017 +0000
Revision:
0:da5b15595769
Child:
1:a036633bc3c2
Finished program, hexadecimal ID fixed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jabbott19 0:da5b15595769 1 /*
jabbott19 0:da5b15595769 2 SD pins: DI = p5, DO = p6, SCK = p7, CS = p8
jabbott19 0:da5b15595769 3 */
jabbott19 0:da5b15595769 4
jabbott19 0:da5b15595769 5
jabbott19 0:da5b15595769 6 #define MULTIPLE_PROBES
jabbott19 0:da5b15595769 7 #define ARM1_DATA_PIN p19
jabbott19 0:da5b15595769 8 #define TAIL_DATA_PIN p20
jabbott19 0:da5b15595769 9 #define ARM2_DATA_PIN p30
jabbott19 0:da5b15595769 10
jabbott19 0:da5b15595769 11 #include "mbed.h"
jabbott19 0:da5b15595769 12 #include "DS1820.h"
jabbott19 0:da5b15595769 13 #include "ExtendedTimer.h"
jabbott19 0:da5b15595769 14 #include "SDFileSystem.h"
jabbott19 0:da5b15595769 15
jabbott19 0:da5b15595769 16 #define MAX_PROBES 45
jabbott19 0:da5b15595769 17
jabbott19 0:da5b15595769 18
jabbott19 0:da5b15595769 19 DS1820* probe1[20];
jabbott19 0:da5b15595769 20 DS1820* probe2[20];
jabbott19 0:da5b15595769 21 DS1820* probeTail[20];
jabbott19 0:da5b15595769 22 SDFileSystem fs(p5, p6, p7, p8, "fs");
jabbott19 0:da5b15595769 23 Serial pc(USBTX,USBRX);
jabbott19 0:da5b15595769 24
jabbott19 0:da5b15595769 25
jabbott19 0:da5b15595769 26 int main()
jabbott19 0:da5b15595769 27 {
jabbott19 0:da5b15595769 28 float lastFlush = 0;
jabbott19 0:da5b15595769 29 float flushInterval = 5*60;
jabbott19 0:da5b15595769 30 float lastMeasurement = 0;
jabbott19 0:da5b15595769 31 float measurementInterval = 30;
jabbott19 0:da5b15595769 32
jabbott19 0:da5b15595769 33 // Mount the filesystem
jabbott19 0:da5b15595769 34 bool mountFailure = fs.mount();
jabbott19 0:da5b15595769 35 if (mountFailure != 0) {
jabbott19 0:da5b15595769 36 pc.printf("Mount failure!\r\n");
jabbott19 0:da5b15595769 37 return -1; // ends program with error status
jabbott19 0:da5b15595769 38 }
jabbott19 0:da5b15595769 39 pc.printf("Mount success!\r\n");
jabbott19 0:da5b15595769 40
jabbott19 0:da5b15595769 41 //File for arm 1 data
jabbott19 0:da5b15595769 42 FILE * output1;
jabbott19 0:da5b15595769 43 //file for arm 2 data
jabbott19 0:da5b15595769 44 FILE* output2;
jabbott19 0:da5b15595769 45 //file for tail data
jabbott19 0:da5b15595769 46 FILE* outputt;
jabbott19 0:da5b15595769 47
jabbott19 0:da5b15595769 48 output1 = fopen("/fs/Arm1.txt", "a");
jabbott19 0:da5b15595769 49 output2 = fopen("/fs/Arm2.txt", "a");
jabbott19 0:da5b15595769 50 outputt = fopen("/fs/Tail.txt", "a");
jabbott19 0:da5b15595769 51
jabbott19 0:da5b15595769 52 ExtendedTimer t;
jabbott19 0:da5b15595769 53 //start the timer
jabbott19 0:da5b15595769 54 t.start();
jabbott19 0:da5b15595769 55
jabbott19 0:da5b15595769 56 //Find Arm1 Probes
jabbott19 0:da5b15595769 57 // Initialize the probe array to DS1820 objects
jabbott19 0:da5b15595769 58 int num_devices1 = 0;
jabbott19 0:da5b15595769 59 //Iterator for stepping through name[]
jabbott19 0:da5b15595769 60 //int count = 0;
jabbott19 0:da5b15595769 61 pc.printf("Searching on arm 1...\r\n");
jabbott19 0:da5b15595769 62 while(DS1820::unassignedProbe(ARM1_DATA_PIN)) {
jabbott19 0:da5b15595769 63 probe1[num_devices1] = new DS1820(ARM1_DATA_PIN);
jabbott19 0:da5b15595769 64 num_devices1++;
jabbott19 0:da5b15595769 65 //count ++;
jabbott19 0:da5b15595769 66 if (num_devices1 == MAX_PROBES)
jabbott19 0:da5b15595769 67 break;
jabbott19 0:da5b15595769 68 }
jabbott19 0:da5b15595769 69 pc.printf("Found %d device(s)\r\n\n", num_devices1);
jabbott19 0:da5b15595769 70
jabbott19 0:da5b15595769 71 pc.printf("Searching on arm 2...\r\n");
jabbott19 0:da5b15595769 72 //Find Arm2 Probes
jabbott19 0:da5b15595769 73 // Initialize the probe array to DS1820 objects
jabbott19 0:da5b15595769 74 int num_devices2 = 0;
jabbott19 0:da5b15595769 75 //Iterator for stepping through name[]
jabbott19 0:da5b15595769 76 //int count = 0;
jabbott19 0:da5b15595769 77 while(DS1820::unassignedProbe(ARM2_DATA_PIN)) {
jabbott19 0:da5b15595769 78 probe2[num_devices2] = new DS1820(ARM2_DATA_PIN);
jabbott19 0:da5b15595769 79 num_devices2++;
jabbott19 0:da5b15595769 80 //count ++;
jabbott19 0:da5b15595769 81 if (num_devices2 == MAX_PROBES)
jabbott19 0:da5b15595769 82 break;
jabbott19 0:da5b15595769 83 }
jabbott19 0:da5b15595769 84 pc.printf("Found %d device(s)\r\n\n", num_devices2);
jabbott19 0:da5b15595769 85
jabbott19 0:da5b15595769 86 pc.printf("Searching on tail...\r\n");
jabbott19 0:da5b15595769 87 //Find Tail Probes
jabbott19 0:da5b15595769 88 // Initialize the probe array to DS1820 objects
jabbott19 0:da5b15595769 89 int num_devicest = 0;
jabbott19 0:da5b15595769 90 //Iterator for stepping through name[]
jabbott19 0:da5b15595769 91 //int count = 0;
jabbott19 0:da5b15595769 92 while(DS1820::unassignedProbe(TAIL_DATA_PIN)) {
jabbott19 0:da5b15595769 93 probeTail[num_devicest] = new DS1820(TAIL_DATA_PIN);
jabbott19 0:da5b15595769 94 num_devicest++;
jabbott19 0:da5b15595769 95 //count ++;
jabbott19 0:da5b15595769 96 if (num_devicest == MAX_PROBES)
jabbott19 0:da5b15595769 97 break;
jabbott19 0:da5b15595769 98 }
jabbott19 0:da5b15595769 99 pc.printf("Found %d device(s)\r\n\n", num_devicest);
jabbott19 0:da5b15595769 100
jabbott19 0:da5b15595769 101 // Write header row to each file with device IDs
jabbott19 0:da5b15595769 102 //tail
jabbott19 0:da5b15595769 103 fprintf(outputt,"Time\t");
jabbott19 0:da5b15595769 104 for(int count = 0; count < num_devicest; count ++) {
jabbott19 0:da5b15595769 105 fprintf(outputt, "%x\t", probeTail[count]);
jabbott19 0:da5b15595769 106 }
jabbott19 0:da5b15595769 107 //Arm1
jabbott19 0:da5b15595769 108 fprintf(output1,"Time\t");
jabbott19 0:da5b15595769 109 for(int count = 0; count < num_devices1; count++) {
jabbott19 0:da5b15595769 110 fprintf(output1, "%x\t", probe1[count]);
jabbott19 0:da5b15595769 111 }
jabbott19 0:da5b15595769 112 fprintf(output2,"Time\t");
jabbott19 0:da5b15595769 113 //Arm2
jabbott19 0:da5b15595769 114 for(int count = 0; count < num_devices2; count++) {
jabbott19 0:da5b15595769 115 fprintf(output2, "%x\t", probe2[count]);
jabbott19 0:da5b15595769 116 }
jabbott19 0:da5b15595769 117 fprintf(outputt,"\r\n");
jabbott19 0:da5b15595769 118 fprintf(output1,"\r\n");
jabbott19 0:da5b15595769 119 fprintf(output2,"\r\n");
jabbott19 0:da5b15595769 120
jabbott19 0:da5b15595769 121 //start collecting data
jabbott19 0:da5b15595769 122
jabbott19 0:da5b15595769 123 while(t.read()<4*60*60) {
jabbott19 0:da5b15595769 124 //conditional statement to trigger sensor readings
jabbott19 0:da5b15595769 125 if ((t.read()-lastMeasurement)>measurementInterval) {
jabbott19 0:da5b15595769 126 lastMeasurement = t.read();
jabbott19 0:da5b15595769 127 //Tail sensors being read
jabbott19 0:da5b15595769 128 probeTail[0]->convertTemperature(true, DS1820::all_devices); //Start temperature conversion, wait until ready
jabbott19 0:da5b15595769 129 fprintf(outputt,"%3.1f \t",t.read());
jabbott19 0:da5b15595769 130 for(int i = 0; i < num_devicest; i++) {
jabbott19 0:da5b15595769 131 fprintf(outputt,"%3.1f \t",probeTail[i]->temperature());
jabbott19 0:da5b15595769 132 }
jabbott19 0:da5b15595769 133 probe1[0]->convertTemperature(true, DS1820::all_devices);
jabbott19 0:da5b15595769 134 fprintf(output1,"%3.1f \t",t.read());
jabbott19 0:da5b15595769 135 for(int i = 0; i < num_devices1; i++) {
jabbott19 0:da5b15595769 136 fprintf(output1,"%3.1f \t",probe1[i]->temperature());
jabbott19 0:da5b15595769 137 }
jabbott19 0:da5b15595769 138 probe2[0]->convertTemperature(true, DS1820::all_devices);
jabbott19 0:da5b15595769 139 fprintf(output2,"%3.1f \t",t.read());
jabbott19 0:da5b15595769 140 for(int i = 0; i < num_devices2; i++) {
jabbott19 0:da5b15595769 141 fprintf(output2,"%3.1f \t",probe2[i]->temperature());
jabbott19 0:da5b15595769 142 }
jabbott19 0:da5b15595769 143 fprintf(outputt,"\r\n");
jabbott19 0:da5b15595769 144 fprintf(output1,"\r\n");
jabbott19 0:da5b15595769 145 fprintf(output2,"\r\n");
jabbott19 0:da5b15595769 146 }
jabbott19 0:da5b15595769 147
jabbott19 0:da5b15595769 148 if((t.read()-lastFlush)>flushInterval) {
jabbott19 0:da5b15595769 149 lastFlush = t.read();
jabbott19 0:da5b15595769 150 pc.printf("Wrote block of data at %3.1f s after power-up\r\n",lastFlush);
jabbott19 0:da5b15595769 151 fclose(outputt);
jabbott19 0:da5b15595769 152 fclose(output1);
jabbott19 0:da5b15595769 153 fclose(output2);
jabbott19 0:da5b15595769 154 output1 = fopen("/fs/Arm1.txt", "a");
jabbott19 0:da5b15595769 155 output2 = fopen("/fs/Arm2.txt", "a");
jabbott19 0:da5b15595769 156 outputt = fopen("/fs/Tail.txt", "a");
jabbott19 0:da5b15595769 157 }
jabbott19 0:da5b15595769 158 //fprintf(output, "Device %d returns %3.1fo\r\n", i, probe[i]->temperature());
jabbott19 0:da5b15595769 159 //flushing io buffer
jabbott19 0:da5b15595769 160
jabbott19 0:da5b15595769 161 }
jabbott19 0:da5b15595769 162 fclose(outputt);
jabbott19 0:da5b15595769 163 fclose(output1);
jabbott19 0:da5b15595769 164 fclose(output2);
jabbott19 0:da5b15595769 165 fs.unmount();
jabbott19 0:da5b15595769 166 }