Thermal wake pod program
Dependencies: DS1820 ExtendedTimer SDFileSystem mbed
Fork of FindingTemp by
main.cpp@3:1d8fca358781, 2017-08-02 (annotated)
- Committer:
- JLarkin
- Date:
- Wed Aug 02 21:54:30 2017 +0000
- Revision:
- 3:1d8fca358781
- Parent:
- 2:98ae1b36758e
Changed SDFileSystem library to mbed_official version. Commands to mount and unmount are not part of this library.
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); |
htompkins20 | 2:98ae1b36758e | 24 | DigitalIn stopMeOrElse(p21); |
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 | |
htompkins20 | 2:98ae1b36758e | 33 | pc.printf("Let's do science!\r\n"); |
jabbott19 | 0:da5b15595769 | 34 | // Mount the filesystem |
JLarkin | 3:1d8fca358781 | 35 | // Not needed with mbed_official version of the library |
JLarkin | 3:1d8fca358781 | 36 | /* |
jabbott19 | 0:da5b15595769 | 37 | bool mountFailure = fs.mount(); |
jabbott19 | 0:da5b15595769 | 38 | if (mountFailure != 0) { |
jabbott19 | 0:da5b15595769 | 39 | pc.printf("Mount failure!\r\n"); |
jabbott19 | 0:da5b15595769 | 40 | return -1; // ends program with error status |
jabbott19 | 0:da5b15595769 | 41 | } |
jabbott19 | 0:da5b15595769 | 42 | pc.printf("Mount success!\r\n"); |
JLarkin | 3:1d8fca358781 | 43 | */ |
jabbott19 | 0:da5b15595769 | 44 | |
jabbott19 | 0:da5b15595769 | 45 | //File for arm 1 data |
JLarkin | 3:1d8fca358781 | 46 | FILE *output1 = fopen("/fs/Arm1.txt", "a");; |
jabbott19 | 0:da5b15595769 | 47 | //file for arm 2 data |
JLarkin | 3:1d8fca358781 | 48 | FILE *output2 = fopen("/fs/Arm2.txt", "a");; |
jabbott19 | 0:da5b15595769 | 49 | //file for tail data |
JLarkin | 3:1d8fca358781 | 50 | FILE *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 | |
JLarkin | 1:a036633bc3c2 | 101 | |
JLarkin | 1:a036633bc3c2 | 102 | unsigned long long fullName; |
JLarkin | 1:a036633bc3c2 | 103 | unsigned int firstName; |
JLarkin | 1:a036633bc3c2 | 104 | unsigned int lastName; |
jabbott19 | 0:da5b15595769 | 105 | // Write header row to each file with device IDs |
jabbott19 | 0:da5b15595769 | 106 | //tail |
jabbott19 | 0:da5b15595769 | 107 | fprintf(outputt,"Time\t"); |
jabbott19 | 0:da5b15595769 | 108 | for(int count = 0; count < num_devicest; count ++) { |
JLarkin | 1:a036633bc3c2 | 109 | fullName = probeTail[count]->whoAmI(); |
JLarkin | 1:a036633bc3c2 | 110 | firstName = fullName >> 32; |
JLarkin | 1:a036633bc3c2 | 111 | lastName = fullName; |
JLarkin | 1:a036633bc3c2 | 112 | fprintf(outputt, "%x%x\t", firstName, lastName); |
jabbott19 | 0:da5b15595769 | 113 | } |
jabbott19 | 0:da5b15595769 | 114 | //Arm1 |
jabbott19 | 0:da5b15595769 | 115 | fprintf(output1,"Time\t"); |
jabbott19 | 0:da5b15595769 | 116 | for(int count = 0; count < num_devices1; count++) { |
JLarkin | 1:a036633bc3c2 | 117 | fullName = probe1[count]->whoAmI(); |
JLarkin | 1:a036633bc3c2 | 118 | firstName = fullName >> 32; |
JLarkin | 1:a036633bc3c2 | 119 | lastName = fullName; |
JLarkin | 1:a036633bc3c2 | 120 | fprintf(output1, "%x%x\t", firstName, lastName); |
jabbott19 | 0:da5b15595769 | 121 | } |
jabbott19 | 0:da5b15595769 | 122 | fprintf(output2,"Time\t"); |
jabbott19 | 0:da5b15595769 | 123 | //Arm2 |
jabbott19 | 0:da5b15595769 | 124 | for(int count = 0; count < num_devices2; count++) { |
JLarkin | 1:a036633bc3c2 | 125 | fullName = probe2[count]->whoAmI(); |
JLarkin | 1:a036633bc3c2 | 126 | firstName = fullName >> 32; |
JLarkin | 1:a036633bc3c2 | 127 | lastName = fullName; |
JLarkin | 1:a036633bc3c2 | 128 | fprintf(output2, "%x%x\t", firstName, lastName); |
jabbott19 | 0:da5b15595769 | 129 | } |
jabbott19 | 0:da5b15595769 | 130 | fprintf(outputt,"\r\n"); |
jabbott19 | 0:da5b15595769 | 131 | fprintf(output1,"\r\n"); |
jabbott19 | 0:da5b15595769 | 132 | fprintf(output2,"\r\n"); |
jabbott19 | 0:da5b15595769 | 133 | |
jabbott19 | 0:da5b15595769 | 134 | //start collecting data |
jabbott19 | 0:da5b15595769 | 135 | |
htompkins20 | 2:98ae1b36758e | 136 | while((t.read()<4*60*60) && (!stopMeOrElse)) { |
jabbott19 | 0:da5b15595769 | 137 | //conditional statement to trigger sensor readings |
jabbott19 | 0:da5b15595769 | 138 | if ((t.read()-lastMeasurement)>measurementInterval) { |
jabbott19 | 0:da5b15595769 | 139 | lastMeasurement = t.read(); |
jabbott19 | 0:da5b15595769 | 140 | //Tail sensors being read |
jabbott19 | 0:da5b15595769 | 141 | probeTail[0]->convertTemperature(true, DS1820::all_devices); //Start temperature conversion, wait until ready |
jabbott19 | 0:da5b15595769 | 142 | fprintf(outputt,"%3.1f \t",t.read()); |
jabbott19 | 0:da5b15595769 | 143 | for(int i = 0; i < num_devicest; i++) { |
jabbott19 | 0:da5b15595769 | 144 | fprintf(outputt,"%3.1f \t",probeTail[i]->temperature()); |
jabbott19 | 0:da5b15595769 | 145 | } |
jabbott19 | 0:da5b15595769 | 146 | probe1[0]->convertTemperature(true, DS1820::all_devices); |
jabbott19 | 0:da5b15595769 | 147 | fprintf(output1,"%3.1f \t",t.read()); |
jabbott19 | 0:da5b15595769 | 148 | for(int i = 0; i < num_devices1; i++) { |
jabbott19 | 0:da5b15595769 | 149 | fprintf(output1,"%3.1f \t",probe1[i]->temperature()); |
jabbott19 | 0:da5b15595769 | 150 | } |
jabbott19 | 0:da5b15595769 | 151 | probe2[0]->convertTemperature(true, DS1820::all_devices); |
jabbott19 | 0:da5b15595769 | 152 | fprintf(output2,"%3.1f \t",t.read()); |
jabbott19 | 0:da5b15595769 | 153 | for(int i = 0; i < num_devices2; i++) { |
jabbott19 | 0:da5b15595769 | 154 | fprintf(output2,"%3.1f \t",probe2[i]->temperature()); |
jabbott19 | 0:da5b15595769 | 155 | } |
jabbott19 | 0:da5b15595769 | 156 | fprintf(outputt,"\r\n"); |
jabbott19 | 0:da5b15595769 | 157 | fprintf(output1,"\r\n"); |
jabbott19 | 0:da5b15595769 | 158 | fprintf(output2,"\r\n"); |
jabbott19 | 0:da5b15595769 | 159 | } |
jabbott19 | 0:da5b15595769 | 160 | |
jabbott19 | 0:da5b15595769 | 161 | if((t.read()-lastFlush)>flushInterval) { |
jabbott19 | 0:da5b15595769 | 162 | lastFlush = t.read(); |
jabbott19 | 0:da5b15595769 | 163 | pc.printf("Wrote block of data at %3.1f s after power-up\r\n",lastFlush); |
jabbott19 | 0:da5b15595769 | 164 | fclose(outputt); |
jabbott19 | 0:da5b15595769 | 165 | fclose(output1); |
jabbott19 | 0:da5b15595769 | 166 | fclose(output2); |
jabbott19 | 0:da5b15595769 | 167 | output1 = fopen("/fs/Arm1.txt", "a"); |
jabbott19 | 0:da5b15595769 | 168 | output2 = fopen("/fs/Arm2.txt", "a"); |
jabbott19 | 0:da5b15595769 | 169 | outputt = fopen("/fs/Tail.txt", "a"); |
jabbott19 | 0:da5b15595769 | 170 | } |
jabbott19 | 0:da5b15595769 | 171 | //fprintf(output, "Device %d returns %3.1fo\r\n", i, probe[i]->temperature()); |
jabbott19 | 0:da5b15595769 | 172 | //flushing io buffer |
jabbott19 | 0:da5b15595769 | 173 | |
jabbott19 | 0:da5b15595769 | 174 | } |
htompkins20 | 2:98ae1b36758e | 175 | pc.printf("It has been good to do science.\r\n"); |
jabbott19 | 0:da5b15595769 | 176 | fclose(outputt); |
jabbott19 | 0:da5b15595769 | 177 | fclose(output1); |
jabbott19 | 0:da5b15595769 | 178 | fclose(output2); |
jabbott19 | 0:da5b15595769 | 179 | } |