Kenji Arai
/
File_Control
File Control Program to record analog inputs with time stamp
main.cpp@0:07e7f4b0c840, 2010-03-28 (annotated)
- Committer:
- kenjiArai
- Date:
- Sun Mar 28 02:06:20 2010 +0000
- Revision:
- 0:07e7f4b0c840
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenjiArai | 0:07e7f4b0c840 | 1 | //----------------------------------------------------------------------------------------------------------- |
kenjiArai | 0:07e7f4b0c840 | 2 | // File Control Program |
kenjiArai | 0:07e7f4b0c840 | 3 | // (c)2010 Kenji Arai / JH1PJL |
kenjiArai | 0:07e7f4b0c840 | 4 | // http://www.page.sannet.ne.jp/kenjia/index.html |
kenjiArai | 0:07e7f4b0c840 | 5 | // March 27th,2010 Started |
kenjiArai | 0:07e7f4b0c840 | 6 | // March 28th,2010 |
kenjiArai | 0:07e7f4b0c840 | 7 | //----------------------------------------------------------------------------------------------------------- |
kenjiArai | 0:07e7f4b0c840 | 8 | // Function |
kenjiArai | 0:07e7f4b0c840 | 9 | // 5 channeles ADC data records into a file which is located in mbed storage |
kenjiArai | 0:07e7f4b0c840 | 10 | // If USE_LCD = 1, data shows on a Text LCD |
kenjiArai | 0:07e7f4b0c840 | 11 | // If USE_RTC = 1, time stamp also writes in the file |
kenjiArai | 0:07e7f4b0c840 | 12 | // Connection |
kenjiArai | 0:07e7f4b0c840 | 13 | // Analog input PIN 15,16,17,19,20 |
kenjiArai | 0:07e7f4b0c840 | 14 | // LCD PIN 22,23,24,25,26,27,28 |
kenjiArai | 0:07e7f4b0c840 | 15 | // -> CAUTION!! pin assignment is different |
kenjiArai | 0:07e7f4b0c840 | 16 | // with " http://mbed.org/projects/cookbook/wiki/TextLCD " |
kenjiArai | 0:07e7f4b0c840 | 17 | // RTC PIN 3 needs to connect 3V Battery |
kenjiArai | 0:07e7f4b0c840 | 18 | // -> Please refer my program " RTC_w_COM" for time adjustment |
kenjiArai | 0:07e7f4b0c840 | 19 | // at " http://mbed.org/users/kenjiArai/programs/RTC_w_COM/5yi9a/ " |
kenjiArai | 0:07e7f4b0c840 | 20 | // IMPORTANT ISSUE!! |
kenjiArai | 0:07e7f4b0c840 | 21 | // Once you start this program |
kenjiArai | 0:07e7f4b0c840 | 22 | // then MBED storage on PC (recogunition as "Memory strage") will disappear |
kenjiArai | 0:07e7f4b0c840 | 23 | // After finish the program (stop at end of main(), fclose()), |
kenjiArai | 0:07e7f4b0c840 | 24 | // you can see MBED again |
kenjiArai | 0:07e7f4b0c840 | 25 | // If you want to stop the program, please push "Reset Button" on mbed board |
kenjiArai | 0:07e7f4b0c840 | 26 | // --> You can keep push "Reset Button" and rewite new bin file |
kenjiArai | 0:07e7f4b0c840 | 27 | //----------------------------------------------------------------------------------------------------------- |
kenjiArai | 0:07e7f4b0c840 | 28 | #include "mbed.h" |
kenjiArai | 0:07e7f4b0c840 | 29 | #include "TextLCD.h" |
kenjiArai | 0:07e7f4b0c840 | 30 | |
kenjiArai | 0:07e7f4b0c840 | 31 | #define DEBUG 1 // 1= Shows progress on PC via USB ( virtual COM line) |
kenjiArai | 0:07e7f4b0c840 | 32 | #define USE_LCD 1 // 1= Display the data on LCD |
kenjiArai | 0:07e7f4b0c840 | 33 | #define USE_RTC 1 // 1= Use RTC (need 3V supply and time adjustment before use) |
kenjiArai | 0:07e7f4b0c840 | 34 | |
kenjiArai | 0:07e7f4b0c840 | 35 | #define NO_OF_SAMPLE 100 // Total recording length -> unit=sec |
kenjiArai | 0:07e7f4b0c840 | 36 | #define TIM_INTVL 10 // Insert time stamp in the file every ?? sec |
kenjiArai | 0:07e7f4b0c840 | 37 | |
kenjiArai | 0:07e7f4b0c840 | 38 | DigitalOut myled(LED1); // Indicate the sampling period |
kenjiArai | 0:07e7f4b0c840 | 39 | |
kenjiArai | 0:07e7f4b0c840 | 40 | #if USE_LCD |
kenjiArai | 0:07e7f4b0c840 | 41 | TextLCD lcd(p22, p28, p27, p26, p25, p24, p23, 40, 2); // rs,rw,e,d0,d1,d2,d3,40char's x 2 lines |
kenjiArai | 0:07e7f4b0c840 | 42 | #endif |
kenjiArai | 0:07e7f4b0c840 | 43 | |
kenjiArai | 0:07e7f4b0c840 | 44 | AnalogIn ain_G_X(p15); // G Sensor |
kenjiArai | 0:07e7f4b0c840 | 45 | AnalogIn ain_G_Y(p16); // G Sensor |
kenjiArai | 0:07e7f4b0c840 | 46 | AnalogIn ain_G_Z(p17); // G Sensor |
kenjiArai | 0:07e7f4b0c840 | 47 | AnalogIn ain_BAT(p19); // Battery Volt |
kenjiArai | 0:07e7f4b0c840 | 48 | AnalogIn ain_TEMP(p20); // Temperature Sensor |
kenjiArai | 0:07e7f4b0c840 | 49 | |
kenjiArai | 0:07e7f4b0c840 | 50 | LocalFileSystem local("local"); // Create the local filesystem under the name "local" |
kenjiArai | 0:07e7f4b0c840 | 51 | |
kenjiArai | 0:07e7f4b0c840 | 52 | int main() { |
kenjiArai | 0:07e7f4b0c840 | 53 | char buf[40]; // data buffer for text |
kenjiArai | 0:07e7f4b0c840 | 54 | int i; // count for number of record |
kenjiArai | 0:07e7f4b0c840 | 55 | float x,y,z,b,t; // Analog data |
kenjiArai | 0:07e7f4b0c840 | 56 | #if USE_RTC |
kenjiArai | 0:07e7f4b0c840 | 57 | time_t seconds, old_sec;// RTC data based on seconds |
kenjiArai | 0:07e7f4b0c840 | 58 | int j; |
kenjiArai | 0:07e7f4b0c840 | 59 | #endif |
kenjiArai | 0:07e7f4b0c840 | 60 | |
kenjiArai | 0:07e7f4b0c840 | 61 | // Open the file |
kenjiArai | 0:07e7f4b0c840 | 62 | #if USE_RTC |
kenjiArai | 0:07e7f4b0c840 | 63 | seconds = time(NULL); |
kenjiArai | 0:07e7f4b0c840 | 64 | sprintf(buf,"/local/%d_out.txt",seconds); // File name is defined based on time from 1970/1/1 |
kenjiArai | 0:07e7f4b0c840 | 65 | FILE *fp = fopen(buf, "w"); // Open "out.txt" on the local file system for writing |
kenjiArai | 0:07e7f4b0c840 | 66 | fprintf(fp, "This is a test program for logging\r\n"); |
kenjiArai | 0:07e7f4b0c840 | 67 | #else |
kenjiArai | 0:07e7f4b0c840 | 68 | FILE *fp = fopen("/local/out.txt", "w"); // Open "out.txt" on the local file system for writing |
kenjiArai | 0:07e7f4b0c840 | 69 | fprintf(fp, "This is a test program for logging\r\n"); |
kenjiArai | 0:07e7f4b0c840 | 70 | #endif |
kenjiArai | 0:07e7f4b0c840 | 71 | |
kenjiArai | 0:07e7f4b0c840 | 72 | #if DEBUG |
kenjiArai | 0:07e7f4b0c840 | 73 | printf("\r\nStart sampling\r\n"); |
kenjiArai | 0:07e7f4b0c840 | 74 | #endif |
kenjiArai | 0:07e7f4b0c840 | 75 | #if USE_LCD |
kenjiArai | 0:07e7f4b0c840 | 76 | lcd.cls(); |
kenjiArai | 0:07e7f4b0c840 | 77 | #endif |
kenjiArai | 0:07e7f4b0c840 | 78 | |
kenjiArai | 0:07e7f4b0c840 | 79 | i = 0; |
kenjiArai | 0:07e7f4b0c840 | 80 | #if USE_RTC |
kenjiArai | 0:07e7f4b0c840 | 81 | seconds = time(NULL); |
kenjiArai | 0:07e7f4b0c840 | 82 | old_sec = seconds; |
kenjiArai | 0:07e7f4b0c840 | 83 | strftime(buf,40, "%I:%M:%S %p (%Y/%m/%d)\r\n", localtime(&seconds)); |
kenjiArai | 0:07e7f4b0c840 | 84 | fprintf(fp,buf); |
kenjiArai | 0:07e7f4b0c840 | 85 | #endif |
kenjiArai | 0:07e7f4b0c840 | 86 | while(1) { |
kenjiArai | 0:07e7f4b0c840 | 87 | // check time interval (1sec) |
kenjiArai | 0:07e7f4b0c840 | 88 | #if USE_RTC |
kenjiArai | 0:07e7f4b0c840 | 89 | myled = 1; |
kenjiArai | 0:07e7f4b0c840 | 90 | wait(0.5); |
kenjiArai | 0:07e7f4b0c840 | 91 | myled = 0; |
kenjiArai | 0:07e7f4b0c840 | 92 | while ((seconds = time(NULL)) == old_sec) ; // Wait 1 sec for loop |
kenjiArai | 0:07e7f4b0c840 | 93 | old_sec = seconds; |
kenjiArai | 0:07e7f4b0c840 | 94 | #else |
kenjiArai | 0:07e7f4b0c840 | 95 | myled = 1; |
kenjiArai | 0:07e7f4b0c840 | 96 | wait(0.5); |
kenjiArai | 0:07e7f4b0c840 | 97 | myled = 0; |
kenjiArai | 0:07e7f4b0c840 | 98 | wait(0.5); |
kenjiArai | 0:07e7f4b0c840 | 99 | #endif |
kenjiArai | 0:07e7f4b0c840 | 100 | // Get analog data from each port |
kenjiArai | 0:07e7f4b0c840 | 101 | x=ain_G_X.read(); |
kenjiArai | 0:07e7f4b0c840 | 102 | y=ain_G_Y.read(); |
kenjiArai | 0:07e7f4b0c840 | 103 | z=ain_G_Z.read(); |
kenjiArai | 0:07e7f4b0c840 | 104 | b=ain_BAT.read(); |
kenjiArai | 0:07e7f4b0c840 | 105 | t=ain_TEMP.read(); |
kenjiArai | 0:07e7f4b0c840 | 106 | // Write data into the file |
kenjiArai | 0:07e7f4b0c840 | 107 | sprintf(buf, "G-Sen, %f, %f, %f \r\n", x, y, z); |
kenjiArai | 0:07e7f4b0c840 | 108 | fprintf(fp,buf); |
kenjiArai | 0:07e7f4b0c840 | 109 | #if USE_LCD |
kenjiArai | 0:07e7f4b0c840 | 110 | lcd.locate(0, 0); // 1st line top |
kenjiArai | 0:07e7f4b0c840 | 111 | lcd.printf(buf); |
kenjiArai | 0:07e7f4b0c840 | 112 | #endif |
kenjiArai | 0:07e7f4b0c840 | 113 | sprintf(buf, "VB, %f, T, %f \r\n", b, t); |
kenjiArai | 0:07e7f4b0c840 | 114 | fprintf(fp,buf); |
kenjiArai | 0:07e7f4b0c840 | 115 | #if USE_LCD |
kenjiArai | 0:07e7f4b0c840 | 116 | lcd.locate(0, 1); // 2nd line top |
kenjiArai | 0:07e7f4b0c840 | 117 | lcd.printf(buf); |
kenjiArai | 0:07e7f4b0c840 | 118 | #endif |
kenjiArai | 0:07e7f4b0c840 | 119 | // if reach to expected data number then finsh |
kenjiArai | 0:07e7f4b0c840 | 120 | if (++i >= NO_OF_SAMPLE){ |
kenjiArai | 0:07e7f4b0c840 | 121 | break; |
kenjiArai | 0:07e7f4b0c840 | 122 | } |
kenjiArai | 0:07e7f4b0c840 | 123 | // Set time satmp |
kenjiArai | 0:07e7f4b0c840 | 124 | #if USE_RTC |
kenjiArai | 0:07e7f4b0c840 | 125 | j = i / TIM_INTVL; |
kenjiArai | 0:07e7f4b0c840 | 126 | if (i == j * TIM_INTVL){ |
kenjiArai | 0:07e7f4b0c840 | 127 | seconds = time(NULL); |
kenjiArai | 0:07e7f4b0c840 | 128 | strftime(buf,40, "Time, %I:%M:%S %p, (%Y/%m/%d) \r\n", localtime(&seconds)); |
kenjiArai | 0:07e7f4b0c840 | 129 | fprintf(fp, buf); |
kenjiArai | 0:07e7f4b0c840 | 130 | } |
kenjiArai | 0:07e7f4b0c840 | 131 | #endif |
kenjiArai | 0:07e7f4b0c840 | 132 | #if DEBUG |
kenjiArai | 0:07e7f4b0c840 | 133 | printf("Sampling #%d / end=%d\r\n", i, NO_OF_SAMPLE); |
kenjiArai | 0:07e7f4b0c840 | 134 | #endif |
kenjiArai | 0:07e7f4b0c840 | 135 | } |
kenjiArai | 0:07e7f4b0c840 | 136 | fclose(fp); |
kenjiArai | 0:07e7f4b0c840 | 137 | // for debug |
kenjiArai | 0:07e7f4b0c840 | 138 | #if DEBUG |
kenjiArai | 0:07e7f4b0c840 | 139 | printf("\r\nFinished sampling\r\n"); |
kenjiArai | 0:07e7f4b0c840 | 140 | #endif |
kenjiArai | 0:07e7f4b0c840 | 141 | } |