File Control Program to record analog inputs with time stamp

Dependencies:   mbed

Committer:
kenjiArai
Date:
Sun Mar 28 02:06:20 2010 +0000
Revision:
0:07e7f4b0c840

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }