temperature logging
Dependencies: SDFileSystem mbed
main.cpp@0:ebeab79bcd5f, 2016-01-30 (annotated)
- Committer:
- wye11
- Date:
- Sat Jan 30 07:45:21 2016 +0000
- Revision:
- 0:ebeab79bcd5f
temperature logging;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
wye11 | 0:ebeab79bcd5f | 1 | // Temperature logging demo - record temperatures to SD card and print them to |
wye11 | 0:ebeab79bcd5f | 2 | // the console every 10 seconds |
wye11 | 0:ebeab79bcd5f | 3 | |
wye11 | 0:ebeab79bcd5f | 4 | #include "mbed.h" |
wye11 | 0:ebeab79bcd5f | 5 | #include "SDFileSystem.h" |
wye11 | 0:ebeab79bcd5f | 6 | |
wye11 | 0:ebeab79bcd5f | 7 | // Analog input (pin 15) |
wye11 | 0:ebeab79bcd5f | 8 | AnalogIn ain(p15); |
wye11 | 0:ebeab79bcd5f | 9 | |
wye11 | 0:ebeab79bcd5f | 10 | // USB serial (tx, rx) |
wye11 | 0:ebeab79bcd5f | 11 | Serial pc(USBTX, USBRX); |
wye11 | 0:ebeab79bcd5f | 12 | |
wye11 | 0:ebeab79bcd5f | 13 | // SD card (SPI pins) |
wye11 | 0:ebeab79bcd5f | 14 | SDFileSystem sd(p5, p6, p7, p8, "sd"); |
wye11 | 0:ebeab79bcd5f | 15 | |
wye11 | 0:ebeab79bcd5f | 16 | // Timer for our timestamps |
wye11 | 0:ebeab79bcd5f | 17 | Timer timer; |
wye11 | 0:ebeab79bcd5f | 18 | |
wye11 | 0:ebeab79bcd5f | 19 | int main() { |
wye11 | 0:ebeab79bcd5f | 20 | |
wye11 | 0:ebeab79bcd5f | 21 | FILE *file; |
wye11 | 0:ebeab79bcd5f | 22 | float voltage_in; |
wye11 | 0:ebeab79bcd5f | 23 | float degrees_c; |
wye11 | 0:ebeab79bcd5f | 24 | int i; |
wye11 | 0:ebeab79bcd5f | 25 | int c; |
wye11 | 0:ebeab79bcd5f | 26 | |
wye11 | 0:ebeab79bcd5f | 27 | // Start our timer |
wye11 | 0:ebeab79bcd5f | 28 | timer.start(); |
wye11 | 0:ebeab79bcd5f | 29 | |
wye11 | 0:ebeab79bcd5f | 30 | // Open file for writing |
wye11 | 0:ebeab79bcd5f | 31 | file = fopen("/sd/temp_data.txt", "w"); |
wye11 | 0:ebeab79bcd5f | 32 | if ( file == NULL ) { |
wye11 | 0:ebeab79bcd5f | 33 | error("ERROR: Could not open file for writing!\n\r"); |
wye11 | 0:ebeab79bcd5f | 34 | return -1; |
wye11 | 0:ebeab79bcd5f | 35 | } |
wye11 | 0:ebeab79bcd5f | 36 | |
wye11 | 0:ebeab79bcd5f | 37 | // Tell the user we need to wait while we collect some data |
wye11 | 0:ebeab79bcd5f | 38 | pc.printf("\nCollecting data (Do not remove SD Card!) ...\n\r"); |
wye11 | 0:ebeab79bcd5f | 39 | |
wye11 | 0:ebeab79bcd5f | 40 | // Collect temperatures with timestamps every second |
wye11 | 0:ebeab79bcd5f | 41 | for(i = 0; i < 10; i++) { |
wye11 | 0:ebeab79bcd5f | 42 | voltage_in = ain * 3.3; |
wye11 | 0:ebeab79bcd5f | 43 | degrees_c = (voltage_in - 0.5) * 100.0; |
wye11 | 0:ebeab79bcd5f | 44 | fprintf(file, "%2.2fs: %3.1f deg C\n\r", timer.read(), degrees_c); |
wye11 | 0:ebeab79bcd5f | 45 | wait(1); |
wye11 | 0:ebeab79bcd5f | 46 | } |
wye11 | 0:ebeab79bcd5f | 47 | |
wye11 | 0:ebeab79bcd5f | 48 | // Close file and re-open it for reading |
wye11 | 0:ebeab79bcd5f | 49 | fclose(file); |
wye11 | 0:ebeab79bcd5f | 50 | file = fopen("/sd/temp_data.txt", "r"); |
wye11 | 0:ebeab79bcd5f | 51 | if ( file == NULL ) { |
wye11 | 0:ebeab79bcd5f | 52 | error("ERROR: Could not open file for reading!\n\r"); |
wye11 | 0:ebeab79bcd5f | 53 | return -1; |
wye11 | 0:ebeab79bcd5f | 54 | } |
wye11 | 0:ebeab79bcd5f | 55 | |
wye11 | 0:ebeab79bcd5f | 56 | // Print results to console |
wye11 | 0:ebeab79bcd5f | 57 | pc.printf("Temperature data:\n\r"); |
wye11 | 0:ebeab79bcd5f | 58 | while(1) { |
wye11 | 0:ebeab79bcd5f | 59 | c = fgetc(file); |
wye11 | 0:ebeab79bcd5f | 60 | if ( c == EOF ) { |
wye11 | 0:ebeab79bcd5f | 61 | break; |
wye11 | 0:ebeab79bcd5f | 62 | } |
wye11 | 0:ebeab79bcd5f | 63 | pc.putc(c); |
wye11 | 0:ebeab79bcd5f | 64 | } |
wye11 | 0:ebeab79bcd5f | 65 | |
wye11 | 0:ebeab79bcd5f | 66 | // Close the file and finish |
wye11 | 0:ebeab79bcd5f | 67 | fclose(file); |
wye11 | 0:ebeab79bcd5f | 68 | pc.printf("Done! Safe to remove SD card\n\r"); |
wye11 | 0:ebeab79bcd5f | 69 | |
wye11 | 0:ebeab79bcd5f | 70 | return 0; |
wye11 | 0:ebeab79bcd5f | 71 | } |