mbed code Inductive_Sensor_Jasper for Bsc paper
Dependencies: Bob DS1825 LDC1101 SDFileSystem mbed
Fork of Inductive_Sensor by
main.cpp@5:736a81a59f3c, 2016-01-16 (annotated)
- Committer:
- bobgiesberts
- Date:
- Sat Jan 16 09:14:21 2016 +0000
- Revision:
- 5:736a81a59f3c
- Parent:
- 4:ae441c5727b9
- Child:
- 6:ff39d60061ca
Power management: take samples for INTERVAL_ON seconds, then go to deepsleep for INTERVAL_OFF seconds. ; There is still a very stupid error with the SDFileSystem. writing to SD does not work properly. After power is cut from SD, it can not be awoken..
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
bobgiesberts | 0:e81b68888268 | 1 | #include "mbed.h" |
bobgiesberts | 0:e81b68888268 | 2 | #include "LDC1101.h" |
bobgiesberts | 1:22c272515015 | 3 | #include "SDFileSystem.h" |
bobgiesberts | 2:1a203732fc95 | 4 | #include "Bob.h" |
bobgiesberts | 0:e81b68888268 | 5 | #include <iostream> |
bobgiesberts | 5:736a81a59f3c | 6 | #include <vector> |
bobgiesberts | 4:ae441c5727b9 | 7 | #include <string> |
bobgiesberts | 0:e81b68888268 | 8 | using namespace std; |
bobgiesberts | 0:e81b68888268 | 9 | |
bobgiesberts | 2:1a203732fc95 | 10 | /** |
bobgiesberts | 2:1a203732fc95 | 11 | * @file main.cpp |
bobgiesberts | 2:1a203732fc95 | 12 | * @brief This file programs the processor for the inductive force sensor |
bobgiesberts | 2:1a203732fc95 | 13 | * using the library LDC1101.h and LDC1101.cpp. |
bobgiesberts | 2:1a203732fc95 | 14 | * - Red Led: processing communication with LDC1101 |
bobgiesberts | 2:1a203732fc95 | 15 | * - Green Led: processing SD card |
bobgiesberts | 4:ae441c5727b9 | 16 | * |
bobgiesberts | 4:ae441c5727b9 | 17 | * Log protocol: |
bobgiesberts | 4:ae441c5727b9 | 18 | * - 1 minute at 20 Hz |
bobgiesberts | 4:ae441c5727b9 | 19 | * - 29 minutes rest |
bobgiesberts | 2:1a203732fc95 | 20 | * |
bobgiesberts | 2:1a203732fc95 | 21 | * @author Bob Giesberts |
bobgiesberts | 2:1a203732fc95 | 22 | * |
bobgiesberts | 2:1a203732fc95 | 23 | * @date 2015-12-17 |
bobgiesberts | 2:1a203732fc95 | 24 | */ |
bobgiesberts | 0:e81b68888268 | 25 | |
bobgiesberts | 5:736a81a59f3c | 26 | // SETTINGS |
bobgiesberts | 5:736a81a59f3c | 27 | bool DEBUG_MODE = false; |
bobgiesberts | 5:736a81a59f3c | 28 | float C = 120E-12; // pF |
bobgiesberts | 5:736a81a59f3c | 29 | int INTERVAL_ON = 2; // 30 = 30 sec |
bobgiesberts | 5:736a81a59f3c | 30 | int INTERVAL_OFF = 2; // 1770 = 29*60+30 sec |
bobgiesberts | 0:e81b68888268 | 31 | |
bobgiesberts | 5:736a81a59f3c | 32 | // load libraries |
bobgiesberts | 5:736a81a59f3c | 33 | Bob bob(PTB0, PTB1, PTC3, PTE0, PTC2, PTE30); // red led, green led, sd_enable, sd_present, batt, 3V3_DET |
bobgiesberts | 5:736a81a59f3c | 34 | Serial pc(USBTX, USBRX); |
bobgiesberts | 4:ae441c5727b9 | 35 | |
bobgiesberts | 4:ae441c5727b9 | 36 | // timer variables |
bobgiesberts | 4:ae441c5727b9 | 37 | clock_t t; |
bobgiesberts | 5:736a81a59f3c | 38 | uint32_t t_new = 0, t_old = 0; // real time in PEE modus (48 MHz) |
bobgiesberts | 4:ae441c5727b9 | 39 | int t_high = 0; |
bobgiesberts | 5:736a81a59f3c | 40 | uint32_t t_lost_new = 0, t_lost_old = 0; // lost time in BLPI modus (16 kHz) |
bobgiesberts | 5:736a81a59f3c | 41 | int t_lost_high = 0; |
bobgiesberts | 5:736a81a59f3c | 42 | float seconds = (float) 2.0 * INTERVAL_ON; |
bobgiesberts | 5:736a81a59f3c | 43 | float t_period = 0; |
bobgiesberts | 4:ae441c5727b9 | 44 | |
bobgiesberts | 4:ae441c5727b9 | 45 | // file variables |
bobgiesberts | 4:ae441c5727b9 | 46 | FILE *fp; |
bobgiesberts | 4:ae441c5727b9 | 47 | string filename = "/sd/data00.txt"; |
bobgiesberts | 4:ae441c5727b9 | 48 | const char *fn; |
bobgiesberts | 4:ae441c5727b9 | 49 | |
bobgiesberts | 5:736a81a59f3c | 50 | // temporal storage for data samples |
bobgiesberts | 5:736a81a59f3c | 51 | vector < float > secvector; |
bobgiesberts | 5:736a81a59f3c | 52 | vector < uint32_t > Lvector; |
bobgiesberts | 5:736a81a59f3c | 53 | float batt; |
bobgiesberts | 5:736a81a59f3c | 54 | |
bobgiesberts | 0:e81b68888268 | 55 | int main(void){ |
bobgiesberts | 5:736a81a59f3c | 56 | |
bobgiesberts | 5:736a81a59f3c | 57 | |
bobgiesberts | 5:736a81a59f3c | 58 | |
bobgiesberts | 2:1a203732fc95 | 59 | /** --- Connection to LDC1101 --- */ |
bobgiesberts | 2:1a203732fc95 | 60 | pc.printf("Connect to LDC1101..."); |
bobgiesberts | 5:736a81a59f3c | 61 | LDC1101* ldc = new LDC1101(PTC6, PTC7, PTC5, PTC4, C, 16E6); |
bobgiesberts | 2:1a203732fc95 | 62 | pc.printf("success!\r\n"); |
bobgiesberts | 5:736a81a59f3c | 63 | bob.flash(1); |
bobgiesberts | 0:e81b68888268 | 64 | |
bobgiesberts | 2:1a203732fc95 | 65 | /** --- Connection to sensor --- */ |
bobgiesberts | 2:1a203732fc95 | 66 | pc.printf("Connect to sensor..."); |
bobgiesberts | 5:736a81a59f3c | 67 | while( !ldc->is_New_LHR_data() ){ |
bobgiesberts | 5:736a81a59f3c | 68 | pc.printf("."); |
bobgiesberts | 5:736a81a59f3c | 69 | } |
bobgiesberts | 5:736a81a59f3c | 70 | // while( ldc.get_LHR_Data() == 0 ) { pc.printf(":"); bob.wakeup(); } // sometimes this gives an error! TODO: fix the error! |
bobgiesberts | 5:736a81a59f3c | 71 | if( ldc->get_LHR_Data() != 16777215 ) { |
bobgiesberts | 5:736a81a59f3c | 72 | pc.printf(" success!\r\n"); |
bobgiesberts | 5:736a81a59f3c | 73 | bob.flash_red(1); |
bobgiesberts | 2:1a203732fc95 | 74 | }else{ |
bobgiesberts | 5:736a81a59f3c | 75 | pc.printf(" failed!\r\n"); |
bobgiesberts | 2:1a203732fc95 | 76 | bob.red(); |
bobgiesberts | 2:1a203732fc95 | 77 | } |
bobgiesberts | 5:736a81a59f3c | 78 | |
bobgiesberts | 2:1a203732fc95 | 79 | |
bobgiesberts | 5:736a81a59f3c | 80 | /**********************************/ |
bobgiesberts | 5:736a81a59f3c | 81 | /*********** DEBUG MODUS **********/ |
bobgiesberts | 5:736a81a59f3c | 82 | /**********************************/ |
bobgiesberts | 5:736a81a59f3c | 83 | if( DEBUG_MODE ) |
bobgiesberts | 5:736a81a59f3c | 84 | { |
bobgiesberts | 5:736a81a59f3c | 85 | while(1) |
bobgiesberts | 5:736a81a59f3c | 86 | { |
bobgiesberts | 5:736a81a59f3c | 87 | if( ldc->is_Oscillation_Error() ){ |
bobgiesberts | 5:736a81a59f3c | 88 | pc.printf("Oscillation Error! \r\n"); |
bobgiesberts | 5:736a81a59f3c | 89 | |
bobgiesberts | 5:736a81a59f3c | 90 | }else{ |
bobgiesberts | 5:736a81a59f3c | 91 | while( !ldc->is_New_LHR_data() ) { |
bobgiesberts | 5:736a81a59f3c | 92 | // pc.printf("."); |
bobgiesberts | 5:736a81a59f3c | 93 | } |
bobgiesberts | 5:736a81a59f3c | 94 | pc.printf("LHR_Data: %d, battery: %.4f\r\n", ldc->get_LHR_Data(), bob.battery()); |
bobgiesberts | 5:736a81a59f3c | 95 | } |
bobgiesberts | 5:736a81a59f3c | 96 | wait( 0.1 ); |
bobgiesberts | 5:736a81a59f3c | 97 | } |
bobgiesberts | 5:736a81a59f3c | 98 | } |
bobgiesberts | 5:736a81a59f3c | 99 | /**********************************/ |
bobgiesberts | 5:736a81a59f3c | 100 | /**********************************/ |
bobgiesberts | 5:736a81a59f3c | 101 | |
bobgiesberts | 5:736a81a59f3c | 102 | |
bobgiesberts | 5:736a81a59f3c | 103 | /** --- Connection to SD card --- */ |
bobgiesberts | 2:1a203732fc95 | 104 | pc.printf("Connect to SD card..."); |
bobgiesberts | 5:736a81a59f3c | 105 | while( bob.checkSD() != 1 ) { pc.printf("."); bob.green(); bob.wakeup(); } |
bobgiesberts | 5:736a81a59f3c | 106 | pc.printf("success!\r\n"); |
bobgiesberts | 5:736a81a59f3c | 107 | bob.flash_green(1); |
bobgiesberts | 5:736a81a59f3c | 108 | |
bobgiesberts | 2:1a203732fc95 | 109 | // Load SD File system |
bobgiesberts | 5:736a81a59f3c | 110 | // SDFileSystem SD(PTD6, PTD7, PTD5, PTD4, "sd"); // mosi, miso, sclk, cs, sd_name |
bobgiesberts | 5:736a81a59f3c | 111 | SDFileSystem* sd = new SDFileSystem(PTD6, PTD7, PTD5, PTD4, "sd"); |
bobgiesberts | 5:736a81a59f3c | 112 | |
bobgiesberts | 4:ae441c5727b9 | 113 | // Create a new data file |
bobgiesberts | 4:ae441c5727b9 | 114 | pc.printf("Creating data file..."); |
bobgiesberts | 4:ae441c5727b9 | 115 | mkdir("/sd", 0777); |
bobgiesberts | 4:ae441c5727b9 | 116 | for(uint8_t i = 0; i < 100; i++) { |
bobgiesberts | 4:ae441c5727b9 | 117 | filename[8] = i/10 + '0'; // arrays count from 0 so the number is 16 and 17 |
bobgiesberts | 4:ae441c5727b9 | 118 | filename[9] = i%10 + '0'; |
bobgiesberts | 4:ae441c5727b9 | 119 | fp = fopen( filename.c_str() , "r" ); |
bobgiesberts | 4:ae441c5727b9 | 120 | if( fp == NULL ) { // read failed so file does not exist |
bobgiesberts | 4:ae441c5727b9 | 121 | fp = fopen( filename.c_str(), "w" ); // create it |
bobgiesberts | 4:ae441c5727b9 | 122 | if( fp != NULL ){ |
bobgiesberts | 4:ae441c5727b9 | 123 | fn = filename.c_str(); |
bobgiesberts | 4:ae441c5727b9 | 124 | pc.printf("success! Filename: %s\r\n", fn); |
bobgiesberts | 4:ae441c5727b9 | 125 | break; |
bobgiesberts | 4:ae441c5727b9 | 126 | }else{ |
bobgiesberts | 4:ae441c5727b9 | 127 | pc.printf("failed!\r\n"); |
bobgiesberts | 4:ae441c5727b9 | 128 | } |
bobgiesberts | 4:ae441c5727b9 | 129 | }else{ // file already exists |
bobgiesberts | 4:ae441c5727b9 | 130 | fclose( fp ); |
bobgiesberts | 4:ae441c5727b9 | 131 | } |
bobgiesberts | 1:22c272515015 | 132 | } |
bobgiesberts | 2:1a203732fc95 | 133 | |
bobgiesberts | 2:1a203732fc95 | 134 | // Write current settings to data file |
bobgiesberts | 4:ae441c5727b9 | 135 | fp = fopen( fn, "w" ); |
bobgiesberts | 5:736a81a59f3c | 136 | fprintf(fp, "DIVIDER : %d\r\n", ldc->get_divider()); |
bobgiesberts | 5:736a81a59f3c | 137 | fprintf(fp, "RESPONSETIME : %d\r\n", ldc->get_responsetime()); |
bobgiesberts | 5:736a81a59f3c | 138 | fprintf(fp, "RP_MIN : %.2f\r\n", ldc->get_RPmin()); |
bobgiesberts | 5:736a81a59f3c | 139 | fprintf(fp, "LHR_RCOUNT : %d\r\n", ldc->get_Rcount()); |
bobgiesberts | 5:736a81a59f3c | 140 | fprintf(fp, "C : %f\r\n", C); |
bobgiesberts | 2:1a203732fc95 | 141 | fprintf(fp, "\r\n\r\n"); |
bobgiesberts | 4:ae441c5727b9 | 142 | fclose(fp); |
bobgiesberts | 4:ae441c5727b9 | 143 | |
bobgiesberts | 5:736a81a59f3c | 144 | delete ldc; |
bobgiesberts | 5:736a81a59f3c | 145 | delete sd; |
bobgiesberts | 5:736a81a59f3c | 146 | |
bobgiesberts | 5:736a81a59f3c | 147 | |
bobgiesberts | 4:ae441c5727b9 | 148 | // initialise timer |
bobgiesberts | 4:ae441c5727b9 | 149 | t = clock(); |
bobgiesberts | 4:ae441c5727b9 | 150 | t_new = (uint32_t) t; |
bobgiesberts | 4:ae441c5727b9 | 151 | |
bobgiesberts | 5:736a81a59f3c | 152 | |
bobgiesberts | 5:736a81a59f3c | 153 | |
bobgiesberts | 5:736a81a59f3c | 154 | // Take samples for a period of INTERVAL_ON sec, then shut down everything and |
bobgiesberts | 5:736a81a59f3c | 155 | // sleep for a period of INTERVAL_OFF seconds. |
bobgiesberts | 0:e81b68888268 | 156 | while(1) |
bobgiesberts | 4:ae441c5727b9 | 157 | { |
bobgiesberts | 5:736a81a59f3c | 158 | |
bobgiesberts | 5:736a81a59f3c | 159 | // wake up. |
bobgiesberts | 5:736a81a59f3c | 160 | pc.printf("waking up!\r\n\r\n"); |
bobgiesberts | 5:736a81a59f3c | 161 | |
bobgiesberts | 5:736a81a59f3c | 162 | bob.wakeup(); // SD + Sensor on |
bobgiesberts | 5:736a81a59f3c | 163 | |
bobgiesberts | 5:736a81a59f3c | 164 | pc.printf("Connect to SD card..."); |
bobgiesberts | 5:736a81a59f3c | 165 | while( bob.checkSD() != 1 ) { pc.printf("."); bob.green(); bob.wakeup(); } |
bobgiesberts | 5:736a81a59f3c | 166 | pc.printf("success!\r\n"); |
bobgiesberts | 5:736a81a59f3c | 167 | bob.greenoff(); |
bobgiesberts | 5:736a81a59f3c | 168 | |
bobgiesberts | 5:736a81a59f3c | 169 | // connection to LDC1101 |
bobgiesberts | 5:736a81a59f3c | 170 | pc.printf("Connect to LDC1101..."); |
bobgiesberts | 5:736a81a59f3c | 171 | LDC1101* ldc = new LDC1101(PTC6, PTC7, PTC5, PTC4, C, 16E6); |
bobgiesberts | 5:736a81a59f3c | 172 | pc.printf("succes!\r\n"); |
bobgiesberts | 1:22c272515015 | 173 | |
bobgiesberts | 5:736a81a59f3c | 174 | // SD-card |
bobgiesberts | 5:736a81a59f3c | 175 | // BIG FAT ERROR RIGHT HERE!!! |
bobgiesberts | 5:736a81a59f3c | 176 | // // |
bobgiesberts | 5:736a81a59f3c | 177 | // // |
bobgiesberts | 5:736a81a59f3c | 178 | // SDFileSystem gives an // |
bobgiesberts | 5:736a81a59f3c | 179 | // error: after power off // |
bobgiesberts | 5:736a81a59f3c | 180 | // everything seems wrong // |
bobgiesberts | 5:736a81a59f3c | 181 | // // |
bobgiesberts | 5:736a81a59f3c | 182 | // // |
bobgiesberts | 5:736a81a59f3c | 183 | // BIG FAT ERROR RIGHT HERE!!! |
bobgiesberts | 5:736a81a59f3c | 184 | // SDFileSystem* sd = new SDFileSystem(PTD6, PTD7, PTD5, PTD4, "sd"); |
bobgiesberts | 5:736a81a59f3c | 185 | // mkdir("/sd", 0777); |
bobgiesberts | 5:736a81a59f3c | 186 | // fp = fopen(fn, "a"); |
bobgiesberts | 5:736a81a59f3c | 187 | pc.printf("Let's begin\r\n\r\n"); |
bobgiesberts | 5:736a81a59f3c | 188 | // fprintf(fp, "Let's begin\r\n\r\n"); |
bobgiesberts | 5:736a81a59f3c | 189 | // fclose(fp); |
bobgiesberts | 5:736a81a59f3c | 190 | |
bobgiesberts | 5:736a81a59f3c | 191 | |
bobgiesberts | 5:736a81a59f3c | 192 | |
bobgiesberts | 5:736a81a59f3c | 193 | // Add lost time to the counter |
bobgiesberts | 5:736a81a59f3c | 194 | t_lost_old = t_lost_new; |
bobgiesberts | 5:736a81a59f3c | 195 | t_lost_new += (INTERVAL_OFF); |
bobgiesberts | 5:736a81a59f3c | 196 | t_period = seconds + INTERVAL_OFF; |
bobgiesberts | 5:736a81a59f3c | 197 | |
bobgiesberts | 5:736a81a59f3c | 198 | while( seconds < t_period + INTERVAL_ON ) |
bobgiesberts | 5:736a81a59f3c | 199 | { |
bobgiesberts | 5:736a81a59f3c | 200 | |
bobgiesberts | 4:ae441c5727b9 | 201 | // Set the timer |
bobgiesberts | 4:ae441c5727b9 | 202 | t_old = t_new; |
bobgiesberts | 4:ae441c5727b9 | 203 | t = clock(); |
bobgiesberts | 4:ae441c5727b9 | 204 | t_new = (uint32_t) t; |
bobgiesberts | 5:736a81a59f3c | 205 | if( t_new < t_old ) t_high++; // uint32_t <clock_t> overflows at 2^32 = 4294.967296 sec = 71 min |
bobgiesberts | 5:736a81a59f3c | 206 | if( t_lost_new < t_lost_old ) t_lost_high++; // uint32_t <t_lost_new> overflows at 2^32 = 4294.967296 sec = 71 min |
bobgiesberts | 2:1a203732fc95 | 207 | |
bobgiesberts | 5:736a81a59f3c | 208 | seconds = ((float) t_new/100.0) + 4294.967296*(float)t_high + t_lost_new + 4294.967296*(float)t_lost_high; |
bobgiesberts | 2:1a203732fc95 | 209 | |
bobgiesberts | 5:736a81a59f3c | 210 | // check if sensor is not overloaded |
bobgiesberts | 5:736a81a59f3c | 211 | if(ldc->is_Oscillation_Error()){ |
bobgiesberts | 5:736a81a59f3c | 212 | // Error: sensor overloaded |
bobgiesberts | 5:736a81a59f3c | 213 | |
bobgiesberts | 5:736a81a59f3c | 214 | }else{ |
bobgiesberts | 5:736a81a59f3c | 215 | // wait until the next value is ready, this takes about 0.2 s? |
bobgiesberts | 5:736a81a59f3c | 216 | while(!ldc->is_New_LHR_data()) { |
bobgiesberts | 5:736a81a59f3c | 217 | // pc.printf("."); |
bobgiesberts | 5:736a81a59f3c | 218 | bob.red(); |
bobgiesberts | 5:736a81a59f3c | 219 | } |
bobgiesberts | 5:736a81a59f3c | 220 | bob.redoff(); |
bobgiesberts | 5:736a81a59f3c | 221 | |
bobgiesberts | 5:736a81a59f3c | 222 | // get the sensor value |
bobgiesberts | 5:736a81a59f3c | 223 | int L = ldc->get_LHR_Data(); |
bobgiesberts | 5:736a81a59f3c | 224 | |
bobgiesberts | 5:736a81a59f3c | 225 | // if the sensor is connected |
bobgiesberts | 5:736a81a59f3c | 226 | if( L != 0 && L != 16777215 ) { |
bobgiesberts | 4:ae441c5727b9 | 227 | |
bobgiesberts | 5:736a81a59f3c | 228 | bob.green(); |
bobgiesberts | 5:736a81a59f3c | 229 | |
bobgiesberts | 5:736a81a59f3c | 230 | // store sample data in RAM / flash memory |
bobgiesberts | 5:736a81a59f3c | 231 | secvector.push_back( seconds ); |
bobgiesberts | 5:736a81a59f3c | 232 | Lvector.push_back( L ); |
bobgiesberts | 4:ae441c5727b9 | 233 | |
bobgiesberts | 5:736a81a59f3c | 234 | // RAM reaches memory limit when vector size = 64 |
bobgiesberts | 5:736a81a59f3c | 235 | // 64 * 32bit * 2 = 512 bytes | KL25Z: 128 kb flash + 16 kb RAM |
bobgiesberts | 5:736a81a59f3c | 236 | if( Lvector.size() > 31 ) |
bobgiesberts | 5:736a81a59f3c | 237 | { |
bobgiesberts | 5:736a81a59f3c | 238 | // If SD-carddetect fails, try to wake it up setting enable to 1 and wait |
bobgiesberts | 5:736a81a59f3c | 239 | while( bob.checkSD() != 1 ) { pc.printf("."); bob.green(); bob.wakeup(); } |
bobgiesberts | 5:736a81a59f3c | 240 | |
bobgiesberts | 5:736a81a59f3c | 241 | if( bob.checkSD() == 1 ) |
bobgiesberts | 5:736a81a59f3c | 242 | { |
bobgiesberts | 5:736a81a59f3c | 243 | // no need to have accurate timestamp for battery level, just one sample for this period |
bobgiesberts | 5:736a81a59f3c | 244 | batt = bob.battery(); |
bobgiesberts | 5:736a81a59f3c | 245 | |
bobgiesberts | 5:736a81a59f3c | 246 | bob.red(); |
bobgiesberts | 5:736a81a59f3c | 247 | |
bobgiesberts | 5:736a81a59f3c | 248 | // BIG FAT ERROR RIGHT HERE!!! |
bobgiesberts | 5:736a81a59f3c | 249 | // // |
bobgiesberts | 5:736a81a59f3c | 250 | // // |
bobgiesberts | 5:736a81a59f3c | 251 | // fopen gives a stupid // |
bobgiesberts | 5:736a81a59f3c | 252 | // error // |
bobgiesberts | 5:736a81a59f3c | 253 | // // |
bobgiesberts | 5:736a81a59f3c | 254 | // // |
bobgiesberts | 5:736a81a59f3c | 255 | // // |
bobgiesberts | 5:736a81a59f3c | 256 | // BIG FAT ERROR RIGHT HERE!!! |
bobgiesberts | 5:736a81a59f3c | 257 | |
bobgiesberts | 5:736a81a59f3c | 258 | /* debugging... |
bobgiesberts | 5:736a81a59f3c | 259 | fp = fopen( fn, "r" ); |
bobgiesberts | 5:736a81a59f3c | 260 | if(fp == NULL) |
bobgiesberts | 5:736a81a59f3c | 261 | { |
bobgiesberts | 5:736a81a59f3c | 262 | pc.printf("r werkt niet \r\n;"); |
bobgiesberts | 5:736a81a59f3c | 263 | }else{ |
bobgiesberts | 5:736a81a59f3c | 264 | pc.printf("r werkt\r\n;"); |
bobgiesberts | 5:736a81a59f3c | 265 | } |
bobgiesberts | 5:736a81a59f3c | 266 | fclose(fp); |
bobgiesberts | 5:736a81a59f3c | 267 | wait (0.5); |
bobgiesberts | 5:736a81a59f3c | 268 | */ |
bobgiesberts | 5:736a81a59f3c | 269 | |
bobgiesberts | 5:736a81a59f3c | 270 | pc.printf("Write RAM memory to SD card..."); |
bobgiesberts | 5:736a81a59f3c | 271 | // fp = fopen( fn, "a" ); |
bobgiesberts | 5:736a81a59f3c | 272 | // for(uint8_t i = 0; i < Lvector.size(); i++) |
bobgiesberts | 5:736a81a59f3c | 273 | // { |
bobgiesberts | 5:736a81a59f3c | 274 | // fprintf( fp, "%.2f;%d;%.6f\r\n", secvector.at(i), Lvector.at(i), batt ); |
bobgiesberts | 5:736a81a59f3c | 275 | // } |
bobgiesberts | 5:736a81a59f3c | 276 | // fclose(fp); |
bobgiesberts | 5:736a81a59f3c | 277 | pc.printf("success!\r\n"); |
bobgiesberts | 5:736a81a59f3c | 278 | bob.redoff(); |
bobgiesberts | 5:736a81a59f3c | 279 | |
bobgiesberts | 5:736a81a59f3c | 280 | secvector.clear(); |
bobgiesberts | 5:736a81a59f3c | 281 | Lvector.clear(); |
bobgiesberts | 5:736a81a59f3c | 282 | } |
bobgiesberts | 5:736a81a59f3c | 283 | } |
bobgiesberts | 5:736a81a59f3c | 284 | |
bobgiesberts | 5:736a81a59f3c | 285 | pc.printf( "[%d]: %.2f;%d;%.6f\r\n", secvector.size(), seconds, L, bob.battery() ); |
bobgiesberts | 5:736a81a59f3c | 286 | |
bobgiesberts | 5:736a81a59f3c | 287 | bob.greenoff(); |
bobgiesberts | 5:736a81a59f3c | 288 | |
bobgiesberts | 5:736a81a59f3c | 289 | |
bobgiesberts | 4:ae441c5727b9 | 290 | } |
bobgiesberts | 5:736a81a59f3c | 291 | |
bobgiesberts | 2:1a203732fc95 | 292 | } |
bobgiesberts | 5:736a81a59f3c | 293 | |
bobgiesberts | 2:1a203732fc95 | 294 | } |
bobgiesberts | 5:736a81a59f3c | 295 | |
bobgiesberts | 5:736a81a59f3c | 296 | // store remaining data before going to sleep |
bobgiesberts | 5:736a81a59f3c | 297 | if( bob.checkSD() == 1 && Lvector.size() != 0) |
bobgiesberts | 5:736a81a59f3c | 298 | { |
bobgiesberts | 5:736a81a59f3c | 299 | // no need to have accurate timestamp for battery level, just one sample for this period |
bobgiesberts | 5:736a81a59f3c | 300 | batt = bob.battery(); |
bobgiesberts | 5:736a81a59f3c | 301 | |
bobgiesberts | 5:736a81a59f3c | 302 | bob.red(); |
bobgiesberts | 5:736a81a59f3c | 303 | pc.printf("Write RAM memory to SD card..."); |
bobgiesberts | 5:736a81a59f3c | 304 | // fp = fopen( fn, "a" ); |
bobgiesberts | 5:736a81a59f3c | 305 | // for(uint8_t i = 0; i < Lvector.size(); i++) |
bobgiesberts | 5:736a81a59f3c | 306 | // fprintf( fp, "%.2f;%d;%.6f\r\n", secvector[i], Lvector[i], batt ); |
bobgiesberts | 5:736a81a59f3c | 307 | // fclose(fp); |
bobgiesberts | 5:736a81a59f3c | 308 | pc.printf("succes!\r\n"); |
bobgiesberts | 5:736a81a59f3c | 309 | bob.redoff(); |
bobgiesberts | 5:736a81a59f3c | 310 | |
bobgiesberts | 5:736a81a59f3c | 311 | } |
bobgiesberts | 5:736a81a59f3c | 312 | secvector.clear(); |
bobgiesberts | 5:736a81a59f3c | 313 | Lvector.clear(); |
bobgiesberts | 5:736a81a59f3c | 314 | |
bobgiesberts | 1:22c272515015 | 315 | |
bobgiesberts | 5:736a81a59f3c | 316 | |
bobgiesberts | 5:736a81a59f3c | 317 | // After measuring for a period of INTERVAL_ON seconds, wait for INTERVAL_OFF minutes |
bobgiesberts | 5:736a81a59f3c | 318 | // While waiting, put everything in lowest power modus |
bobgiesberts | 5:736a81a59f3c | 319 | pc.printf("zzz...\r\n\r\n"); |
bobgiesberts | 5:736a81a59f3c | 320 | |
bobgiesberts | 5:736a81a59f3c | 321 | |
bobgiesberts | 2:1a203732fc95 | 322 | |
bobgiesberts | 5:736a81a59f3c | 323 | // SD-card: Kill SPI to SD card |
bobgiesberts | 5:736a81a59f3c | 324 | delete sd; |
bobgiesberts | 5:736a81a59f3c | 325 | DigitalOut sdP2(PTD4); sdP2 = 0; // cs |
bobgiesberts | 5:736a81a59f3c | 326 | DigitalOut sdP3(PTD6); sdP3 = 0; // mosi |
bobgiesberts | 5:736a81a59f3c | 327 | DigitalOut sdP5(PTD5); sdP5 = 0; // sck |
bobgiesberts | 5:736a81a59f3c | 328 | DigitalOut sdP7(PTD7); sdP7 = 0; // miso |
bobgiesberts | 5:736a81a59f3c | 329 | |
bobgiesberts | 5:736a81a59f3c | 330 | // LDC in SHUTDOWN mode |
bobgiesberts | 5:736a81a59f3c | 331 | ldc->sleep(); |
bobgiesberts | 5:736a81a59f3c | 332 | |
bobgiesberts | 5:736a81a59f3c | 333 | // Sensor: Kill SPI to sensor |
bobgiesberts | 5:736a81a59f3c | 334 | DigitalOut senP2(PTC7); senP2 = 0; // miso |
bobgiesberts | 5:736a81a59f3c | 335 | DigitalOut senP3(PTC5); senP3 = 0; // sck |
bobgiesberts | 5:736a81a59f3c | 336 | DigitalOut senP4(PTC6); senP4 = 0; // mosi |
bobgiesberts | 5:736a81a59f3c | 337 | DigitalOut senP5(PTC4); senP5 = 0; // cs |
bobgiesberts | 5:736a81a59f3c | 338 | |
bobgiesberts | 5:736a81a59f3c | 339 | // Power off SD + Sensor, KL25Z in deepsleep mode |
bobgiesberts | 5:736a81a59f3c | 340 | bob.sleep( INTERVAL_OFF ); |
bobgiesberts | 5:736a81a59f3c | 341 | |
bobgiesberts | 5:736a81a59f3c | 342 | // RESULTS |
bobgiesberts | 5:736a81a59f3c | 343 | // 0.101 mA (zonder sensor, zonder SD) |
bobgiesberts | 5:736a81a59f3c | 344 | // 1.300 mA (zonder sensor, met SD) |
bobgiesberts | 5:736a81a59f3c | 345 | // 2.574 mA (met sensor, zonder SD) |
bobgiesberts | 5:736a81a59f3c | 346 | // 3.185 mA (met sensor, met SD) |
bobgiesberts | 0:e81b68888268 | 347 | } |
bobgiesberts | 5:736a81a59f3c | 348 | |
bobgiesberts | 0:e81b68888268 | 349 | } |