Thermal wake pod program
Dependencies: DS1820 ExtendedTimer SDFileSystem mbed
Fork of FindingTemp by
main.cpp@0:da5b15595769, 2017-04-17 (annotated)
- 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?
User | Revision | Line number | New 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 | } |