SD-Card Control Program / Using Micro-SD / based on SDCardTest Program (http://mbed.org/users/simon/programs/SDCardTest/gpdz4x/)

Dependencies:   mbed SDFileSystem

Please refer following my Notebook page.
/users/kenjiArai/notebook/sd-card-control-new/#

Committer:
kenjiArai
Date:
Fri Oct 03 10:43:29 2014 +0000
Revision:
1:484feaf2da84
Parent:
0:3bd1cdc1f3f4
Child:
2:1397a54382ec
Modified format and updated latest version of Library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 1:484feaf2da84 1 /*
kenjiArai 1:484feaf2da84 2 * mbed Application program
kenjiArai 1:484feaf2da84 3 * SD-Card Control Program
kenjiArai 1:484feaf2da84 4 *
kenjiArai 1:484feaf2da84 5 * Copyright (c) 2010-2014 Kenji Arai / JH1PJL
kenjiArai 1:484feaf2da84 6 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 1:484feaf2da84 7 * http://mbed.org/users/kenjiArai/
kenjiArai 1:484feaf2da84 8 * March 28th, 2010 Started
kenjiArai 1:484feaf2da84 9 * April 3rd, 2010
kenjiArai 1:484feaf2da84 10 * October 3rd, 2014 use latest lib.
kenjiArai 1:484feaf2da84 11 *
kenjiArai 1:484feaf2da84 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
kenjiArai 1:484feaf2da84 13 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
kenjiArai 1:484feaf2da84 14 * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
kenjiArai 1:484feaf2da84 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kenjiArai 1:484feaf2da84 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
kenjiArai 1:484feaf2da84 17 */
kenjiArai 1:484feaf2da84 18
kenjiArai 1:484feaf2da84 19 //-------------------------------------------------------------------------------------------------
kenjiArai 0:3bd1cdc1f3f4 20 // Function
kenjiArai 0:3bd1cdc1f3f4 21 // 5 channeles ADC data records into a file which is located in SD-Card
kenjiArai 0:3bd1cdc1f3f4 22 // If USE_LCD = 1, data shows on a Text LCD
kenjiArai 0:3bd1cdc1f3f4 23 // If USE_RTC = 1, time stamp also writes in the file
kenjiArai 0:3bd1cdc1f3f4 24 // Connection
kenjiArai 0:3bd1cdc1f3f4 25 // Analog input PIN 15,16,17,19,20
kenjiArai 1:484feaf2da84 26 // LCD PIN 22,21,8,7,6,5
kenjiArai 0:3bd1cdc1f3f4 27 // -> CAUTION!! pin assignment is different
kenjiArai 0:3bd1cdc1f3f4 28 // with " http://mbed.org/projects/cookbook/wiki/TextLCD "
kenjiArai 0:3bd1cdc1f3f4 29 // RTC PIN 3 needs to connect 3V Battery
kenjiArai 0:3bd1cdc1f3f4 30 // -> Please refer my program " RTC_w_COM" for time adjustment
kenjiArai 0:3bd1cdc1f3f4 31 // at " http://mbed.org/users/kenjiArai/programs/RTC_w_COM/5yi9a/ "
kenjiArai 1:484feaf2da84 32 //-------------------------------------------------------------------------------------------------
kenjiArai 1:484feaf2da84 33
kenjiArai 1:484feaf2da84 34 // Include ---------------------------------------------------------------------------------------
kenjiArai 0:3bd1cdc1f3f4 35 #include "mbed.h"
kenjiArai 0:3bd1cdc1f3f4 36 #include "TextLCD.h"
kenjiArai 0:3bd1cdc1f3f4 37 #include "SDFileSystem.h"
kenjiArai 0:3bd1cdc1f3f4 38
kenjiArai 1:484feaf2da84 39 // Definition ------------------------------------------------------------------------------------
kenjiArai 1:484feaf2da84 40 #define DEBUG 1 // 1= Shows progress on PC via USB ( virtual COM line)
kenjiArai 1:484feaf2da84 41 #define USE_LCD 1 // 1= Display the data on LCD
kenjiArai 1:484feaf2da84 42 #define USE_RTC 1 // 1= Use RTC (need 3V supply and time adjustment before use)
kenjiArai 1:484feaf2da84 43
kenjiArai 1:484feaf2da84 44 #define NO_OF_SAMPLE 100 // Total recording length -> unit=sec
kenjiArai 1:484feaf2da84 45 #define TIM_INTVL 10 // Insert time stamp in the file every ?? sec
kenjiArai 0:3bd1cdc1f3f4 46
kenjiArai 1:484feaf2da84 47 // Object ----------------------------------------------------------------------------------------
kenjiArai 1:484feaf2da84 48 DigitalOut myled(LED1); // Indicate the sampling period
kenjiArai 0:3bd1cdc1f3f4 49 #if USE_LCD
kenjiArai 1:484feaf2da84 50 TextLCD lcd(p22, p21, p8, p7, p6, p5, TextLCD::LCD40x2); // rs, e, d4-d7
kenjiArai 1:484feaf2da84 51 #endif
kenjiArai 1:484feaf2da84 52 AnalogIn ain_G_X(p15); // G Sensor
kenjiArai 1:484feaf2da84 53 AnalogIn ain_G_Y(p16); // G Sensor
kenjiArai 1:484feaf2da84 54 AnalogIn ain_G_Z(p17); // G Sensor
kenjiArai 1:484feaf2da84 55 AnalogIn ain_BAT(p19); // Battery Volt
kenjiArai 1:484feaf2da84 56 AnalogIn ain_TEMP(p20); // Temperature Sensor
kenjiArai 1:484feaf2da84 57 SDFileSystem sd(p11, p12, p13, p14, "sd"); // do,di,clk,cs
kenjiArai 1:484feaf2da84 58 #if DEBUG
kenjiArai 1:484feaf2da84 59 Serial pc(USBTX, USBRX);
kenjiArai 0:3bd1cdc1f3f4 60 #endif
kenjiArai 0:3bd1cdc1f3f4 61
kenjiArai 1:484feaf2da84 62 // RAM -------------------------------------------------------------------------------------------
kenjiArai 1:484feaf2da84 63
kenjiArai 1:484feaf2da84 64 // ROM / Constant data ---------------------------------------------------------------------------
kenjiArai 1:484feaf2da84 65
kenjiArai 1:484feaf2da84 66 // Function prototypes ---------------------------------------------------------------------------
kenjiArai 0:3bd1cdc1f3f4 67
kenjiArai 1:484feaf2da84 68 //-------------------------------------------------------------------------------------------------
kenjiArai 1:484feaf2da84 69 // Control Program
kenjiArai 1:484feaf2da84 70 //-------------------------------------------------------------------------------------------------
kenjiArai 1:484feaf2da84 71 int main()
kenjiArai 1:484feaf2da84 72 {
kenjiArai 0:3bd1cdc1f3f4 73 char buf[40]; // data buffer for text
kenjiArai 0:3bd1cdc1f3f4 74 int count; // count for number of record
kenjiArai 0:3bd1cdc1f3f4 75 float x,y,z,b,t; // Analog data
kenjiArai 1:484feaf2da84 76 #if USE_RTC
kenjiArai 0:3bd1cdc1f3f4 77 time_t seconds, old_sec; // RTC data based on seconds
kenjiArai 0:3bd1cdc1f3f4 78 int i;
kenjiArai 1:484feaf2da84 79 #endif
kenjiArai 1:484feaf2da84 80
kenjiArai 0:3bd1cdc1f3f4 81 // Open the file
kenjiArai 0:3bd1cdc1f3f4 82 #if USE_RTC
kenjiArai 0:3bd1cdc1f3f4 83 seconds = time(NULL);
kenjiArai 0:3bd1cdc1f3f4 84 seconds %= 100000000; // Adjust 8 charcters file name
kenjiArai 1:484feaf2da84 85 sprintf(buf,"/sd/%d.txt",seconds); // File name is defined based on time from 1970/1/1
kenjiArai 0:3bd1cdc1f3f4 86 FILE *fp = fopen(buf, "w"); // Open "out.txt" on the local file system for writing
kenjiArai 1:484feaf2da84 87 #if DEBUG
kenjiArai 0:3bd1cdc1f3f4 88 printf("\r\n %s \r\n", buf); // File name on the screen
kenjiArai 0:3bd1cdc1f3f4 89 printf(" use RTC\r\n");
kenjiArai 1:484feaf2da84 90 #endif
kenjiArai 0:3bd1cdc1f3f4 91 #else
kenjiArai 0:3bd1cdc1f3f4 92 FILE *fp = fopen("/sd/out.txt", "w");// Open "out.txt" on the local file system for writing
kenjiArai 1:484feaf2da84 93 #if DEBUG
kenjiArai 0:3bd1cdc1f3f4 94 printf("\r\n /sd/out.txt\r\n"); // File name on the screen
kenjiArai 0:3bd1cdc1f3f4 95 printf(" Not use RTC\r\n");
kenjiArai 1:484feaf2da84 96 #endif
kenjiArai 0:3bd1cdc1f3f4 97 #endif
kenjiArai 0:3bd1cdc1f3f4 98 if(fp == NULL) {
kenjiArai 1:484feaf2da84 99 // File not open and stop
kenjiArai 1:484feaf2da84 100 #if USE_LCD
kenjiArai 0:3bd1cdc1f3f4 101 lcd.printf(" Could not open file for write\n");
kenjiArai 1:484feaf2da84 102 #endif
kenjiArai 1:484feaf2da84 103 #if DEBUG
kenjiArai 0:3bd1cdc1f3f4 104 printf( "\r\n Could not open file for write\r\n");
kenjiArai 1:484feaf2da84 105 #endif
kenjiArai 0:3bd1cdc1f3f4 106 while(1) ;
kenjiArai 0:3bd1cdc1f3f4 107 }
kenjiArai 1:484feaf2da84 108 // Success file access
kenjiArai 0:3bd1cdc1f3f4 109 fprintf(fp, "This is a test program for logging /by JH1PJL\r\n");
kenjiArai 1:484feaf2da84 110 #if DEBUG
kenjiArai 0:3bd1cdc1f3f4 111 printf( "This is a test program for logging /by JH1PJL\r\n");
kenjiArai 0:3bd1cdc1f3f4 112 printf("\r\nStart sampling\r\n");
kenjiArai 1:484feaf2da84 113 #endif
kenjiArai 1:484feaf2da84 114 #if USE_LCD
kenjiArai 0:3bd1cdc1f3f4 115 lcd.cls();
kenjiArai 1:484feaf2da84 116 #endif
kenjiArai 1:484feaf2da84 117
kenjiArai 0:3bd1cdc1f3f4 118 count = 0; // Initialze counter
kenjiArai 0:3bd1cdc1f3f4 119 #if USE_RTC
kenjiArai 0:3bd1cdc1f3f4 120 seconds = time(NULL); // Put time stamp in the file
kenjiArai 1:484feaf2da84 121 old_sec = seconds;
kenjiArai 0:3bd1cdc1f3f4 122 strftime(buf,40, "Time:%I:%M:%S %p, %Y/%m/%d\r\n", localtime(&seconds));
kenjiArai 0:3bd1cdc1f3f4 123 fprintf(fp,buf);
kenjiArai 1:484feaf2da84 124 #if DEBUG
kenjiArai 0:3bd1cdc1f3f4 125 printf(" %s \r\n", buf);
kenjiArai 1:484feaf2da84 126 #endif
kenjiArai 0:3bd1cdc1f3f4 127 #endif
kenjiArai 0:3bd1cdc1f3f4 128 while(1) {
kenjiArai 0:3bd1cdc1f3f4 129 // check time interval (1sec)
kenjiArai 1:484feaf2da84 130 #if USE_RTC
kenjiArai 0:3bd1cdc1f3f4 131 myled = 1;
kenjiArai 0:3bd1cdc1f3f4 132 wait(0.5);
kenjiArai 0:3bd1cdc1f3f4 133 myled = 0;
kenjiArai 0:3bd1cdc1f3f4 134 while ((seconds = time(NULL)) == old_sec) ; // Wait 1 sec for loop
kenjiArai 0:3bd1cdc1f3f4 135 old_sec = seconds;
kenjiArai 1:484feaf2da84 136 #else
kenjiArai 0:3bd1cdc1f3f4 137 myled = 1;
kenjiArai 0:3bd1cdc1f3f4 138 wait(0.5);
kenjiArai 0:3bd1cdc1f3f4 139 myled = 0;
kenjiArai 1:484feaf2da84 140 wait(0.5);
kenjiArai 1:484feaf2da84 141 #endif
kenjiArai 0:3bd1cdc1f3f4 142 // Get analog data from each port
kenjiArai 0:3bd1cdc1f3f4 143 x=ain_G_X.read();
kenjiArai 0:3bd1cdc1f3f4 144 y=ain_G_Y.read();
kenjiArai 0:3bd1cdc1f3f4 145 z=ain_G_Z.read();
kenjiArai 0:3bd1cdc1f3f4 146 b=ain_BAT.read();
kenjiArai 0:3bd1cdc1f3f4 147 t=ain_TEMP.read();
kenjiArai 0:3bd1cdc1f3f4 148 // Write data into the file
kenjiArai 0:3bd1cdc1f3f4 149 sprintf(buf, "G-Sen, %f, %f, %f \r\n", x, y, z);
kenjiArai 0:3bd1cdc1f3f4 150 fprintf(fp,buf);
kenjiArai 1:484feaf2da84 151 #if USE_LCD
kenjiArai 0:3bd1cdc1f3f4 152 lcd.locate(0, 0); // 1st line top
kenjiArai 0:3bd1cdc1f3f4 153 lcd.printf(buf);
kenjiArai 1:484feaf2da84 154 #endif
kenjiArai 1:484feaf2da84 155 #if DEBUG
kenjiArai 0:3bd1cdc1f3f4 156 printf(" %s", buf);
kenjiArai 1:484feaf2da84 157 #endif
kenjiArai 0:3bd1cdc1f3f4 158 sprintf(buf, "VB, %f, T, %f \r\n", b, t);
kenjiArai 0:3bd1cdc1f3f4 159 fprintf(fp,buf);
kenjiArai 1:484feaf2da84 160 #if USE_LCD
kenjiArai 0:3bd1cdc1f3f4 161 lcd.locate(0, 1); // 2nd line top
kenjiArai 0:3bd1cdc1f3f4 162 lcd.printf(buf);
kenjiArai 1:484feaf2da84 163 #endif
kenjiArai 1:484feaf2da84 164 #if DEBUG
kenjiArai 0:3bd1cdc1f3f4 165 printf(" %s", buf);
kenjiArai 1:484feaf2da84 166 #endif
kenjiArai 0:3bd1cdc1f3f4 167 // if reach to expected data number then finsh
kenjiArai 1:484feaf2da84 168 if (++count > NO_OF_SAMPLE) {
kenjiArai 0:3bd1cdc1f3f4 169 break;
kenjiArai 0:3bd1cdc1f3f4 170 }
kenjiArai 0:3bd1cdc1f3f4 171 // Set time satmp
kenjiArai 1:484feaf2da84 172 #if USE_RTC
kenjiArai 0:3bd1cdc1f3f4 173 i = count / TIM_INTVL;
kenjiArai 1:484feaf2da84 174 if (count == i * TIM_INTVL) {
kenjiArai 1:484feaf2da84 175 //seconds = time(NULL); // this line is wrong! BUG
kenjiArai 0:3bd1cdc1f3f4 176 strftime(buf,40, "Time:%I:%M:%S %p, %Y/%m/%d\r\n", localtime(&seconds));
kenjiArai 0:3bd1cdc1f3f4 177 fprintf(fp, buf);
kenjiArai 1:484feaf2da84 178 #if DEBUG
kenjiArai 0:3bd1cdc1f3f4 179 printf(" %s", buf);
kenjiArai 1:484feaf2da84 180 #endif
kenjiArai 0:3bd1cdc1f3f4 181 }
kenjiArai 1:484feaf2da84 182 #endif
kenjiArai 1:484feaf2da84 183 #if DEBUG
kenjiArai 0:3bd1cdc1f3f4 184 printf("Sampling #%d/end=%d\r\n", count, NO_OF_SAMPLE);
kenjiArai 1:484feaf2da84 185 #endif
kenjiArai 0:3bd1cdc1f3f4 186 }
kenjiArai 0:3bd1cdc1f3f4 187 // Set time satmp
kenjiArai 0:3bd1cdc1f3f4 188 #if USE_RTC
kenjiArai 0:3bd1cdc1f3f4 189 sprintf(buf,"Sampling numbers: %d\r\n", count-1);
kenjiArai 0:3bd1cdc1f3f4 190 fprintf(fp, buf);
kenjiArai 1:484feaf2da84 191 seconds = time(NULL);
kenjiArai 0:3bd1cdc1f3f4 192 strftime(buf,40, "Time:%I:%M:%S %p, %Y/%m/%d\r\n", localtime(&seconds));
kenjiArai 0:3bd1cdc1f3f4 193 fprintf(fp, buf);
kenjiArai 1:484feaf2da84 194 #if DEBUG
kenjiArai 0:3bd1cdc1f3f4 195 printf(" %s", buf);
kenjiArai 1:484feaf2da84 196 #endif
kenjiArai 1:484feaf2da84 197 #endif
kenjiArai 0:3bd1cdc1f3f4 198 fclose(fp);
kenjiArai 0:3bd1cdc1f3f4 199 // for debug
kenjiArai 1:484feaf2da84 200 #if DEBUG
kenjiArai 0:3bd1cdc1f3f4 201 printf("\r\nFinished sampling\r\n");
kenjiArai 1:484feaf2da84 202 #endif
kenjiArai 0:3bd1cdc1f3f4 203 }