Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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 | } |
