機器のI/OをArduinoでSDに記録したい
皆様、お世話になります。
Arduinoでデーターロガーのスケッチを作成しています。
スケッチしてみましたが動くかどうか確認とこう直した方が良いなど改善点が有れば、お願い致します。
2番ピンに変化が有った時(ONかOFF)に時間と2番ピンの状態をSDカードに記録したいのです。
これが、うまくいけば系統を増やしていきたいです。
書いたスケッチ
#include <SD.h>
// この値は使用しているシールドや基板に合わせて変更すること。たとえば、
// イーサーネットシールドは 4
// Adafruit のSDシールドは 10
// Sparkfun のSDシールドは 8
const int chipSelect = 4;
void setup()
{
// シリアルポート初期化
Serial.begin(9600);
while (!Serial) {
; // USBケーブルが接続されるのを待つ。この待ちループは Leonardo のみ必要。
pinMode(2,INPUT) ; //スイッチに接続ピンをデジタル入力に設定A
}
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 );
}
void loop()
{
// ファイルを開く
File dataFile = SD.open("datalog.txt", FILE_WRITE);
// もし2番ピンに変化が有れば書き込む
if (digitalRead(2)==HIGH) {
int value = digitalRead(2);
dataFile.println(value);
dataFile.close();
// シリアルポートにも出力
Serial.println(value);
}
if (digitalRead(2)==LOW) {
int value = digitalRead(2);
dataFile.println(value);
dataFile.close();
// シリアルポートにも出力
Serial.println(value);
}
// ファイルが開けなかったらエラーを出力
else {
Serial.println(F("error opening datalog.txt"));
}
}
void dateTime(uint16_t* date, uint16_t* time)
{
uint16_t year = 2014;
uint8_t month = 7, day = 22, hour = 14, minute = 0, second = 0;
// GPSやRTCから日付と時間を取得
// FAT_DATEマクロでフィールドを埋めて日付を返す
*date = FAT_DATE(year, month, day);
// FAT_TIMEマクロでフィールドを埋めて時間を返す
*time = FAT_TIME(hour, minute, second);
}
よろしくお願い致します。