Thermal wake pod program

Dependencies:   DS1820 ExtendedTimer SDFileSystem mbed

Fork of FindingTemp by Julia Abbott

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?

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);
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 }