#include #include // タイマー割り込みを利用する為に必要なヘッダファイル #define FINISH 1000 // カウンタ終了値 #define INTERVAL 1 // タイマー割込の間隔(ms) // この値は使用しているシールドや基板に合わせて変更すること。たとえば、 // イーサーネットシールドは 4 // Adafruit のSDシールドは 10 // Sparkfun のSDシールドは 8 const int chipSelect = 4; long unsigned int count1=0; File dataFile; // 割り込み時に処理される関数 void flash() { // ファイルにカウンタとAD変換値を書き込む count1++; dataFile.print(count1); dataFile.print(','); int value = analogRead(0); dataFile.println(value); // シリアルポートにも出力 // Serial.println(value); } void setup() { // シリアルポート初期化 Serial.begin(9600); while (!Serial) { ; // USBケーブルが接続されるのを待つ。この待ちループは Leonardo のみ必要。 } Serial.print(F("Initializing SD card...")); // SSピン(Unoは10番、Megaは53番)は使わない場合でも出力にする必要があります。 // そうしないと、SPIがスレーブモードに移行し、SDライブラリが動作しなくなります。 pinMode(SS, OUTPUT); // SDライブラリを初期化 if (!SD.begin(chipSelect)) { Serial.println(F("Card failed, or not present")); // 失敗、何もしない while(1); } Serial.println(F("ok.")); // 日付と時刻を返す関数を登録 SdFile::dateTimeCallback( &dateTime ); // ファイルが存在してたら削除 if(SD.exists("datalog.txt")){ SD.remove("datalog.txt"); Serial.println(F("File exist! Remove File.")); } // ファイルを開く dataFile = SD.open("datalog.txt", FILE_WRITE); // ファイルが開ければストップ if (dataFile) { Serial.println(F("File opened. name:datalog.txt")); } else{ Serial.println(F("error opening file. name:datalog.txt")); while(1); } // 割込タイマ設定・開始 MsTimer2::set(INTERVAL, flash); // INTERVALms毎にflash()割込み関数を呼び出す MsTimer2::start(); // タイマー割り込み開始 } void loop() { if(count1>FINISH){ // カウンタが終了値になったら MsTimer2::stop(); // タイマー割り込み終了 dataFile.close(); // ファイルを閉じる Serial.println(F("Finished!!")); while(1); // ストップ } } void dateTime(uint16_t* date, uint16_t* time) { uint16_t year = 2013; uint8_t month = 2, day = 3, hour = 9, minute = 0, second = 0; // GPSやRTCから日付と時間を取得 // FAT_DATEマクロでフィールドを埋めて日付を返す *date = FAT_DATE(year, month, day); // FAT_TIMEマクロでフィールドを埋めて時間を返す *time = FAT_TIME(hour, minute, second); }