Log data to a micro SD card.

Dependencies:   SDFileSystem mbed

Revision:
0:56d642e39289
Child:
1:c5e56e2580bf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Apr 22 06:57:07 2015 +0000
@@ -0,0 +1,63 @@
+#include "mbed.h"
+#include "SDFileSystem.h"
+
+DigitalIn mybutton(USER_BUTTON);
+Serial pc(SERIAL_TX, SERIAL_RX);
+
+SDFileSystem sd(SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS, "sd");
+FILE *fp;
+
+Ticker timer;
+static double t;    //時間t
+
+//SDカード内からログ番号の最大値を取得する関数
+int find_last() {
+    int i, n = 0;
+    DIR *dp;
+    struct dirent *dirst;
+    dp = opendir("/sd/");
+    if (!dp){
+        printf("Could not open directry\n");
+        return -1;
+    }
+    while((dirst = readdir(dp)) != NULL) {
+        if(sscanf(dirst->d_name, "log%03d.csv", &i) == 1 && i>n) {
+            n = i;
+        }
+    }
+    closedir(dp);
+    return n;
+}
+
+void Int_Timer() {
+    //ボタンが押されているかどうかをログする
+    fprintf(fp, "%.1f,%d\n", t, (int)mybutton);
+    t += 0.1;
+}
+
+int main() {
+    char filename[15];
+    int n = find_last();
+    if(n < 0) return 0;
+    
+    //ログ番号を+1してファイルを新規作成
+    //ファイル名は"logXXX.csv"
+    sprintf(filename, "/sd/log%03d.csv", n+1);
+    fp = fopen(filename, "w");
+    
+    printf("Start writing!\n");
+    fprintf(fp, "time,x\n");
+    
+    //0.1s間隔のタイマー割り込み
+    timer.attach(&Int_Timer, 0.1);
+    
+    t = 0.0;
+    //10.0sで終了
+    while(t < 10.0){
+    }
+
+    timer.detach();
+    fclose(fp);
+    printf("Finish!\n");
+}
+ 
\ No newline at end of file