技術士をとってからの日記

一般企業に勤めている技術士(金属)の30代。技術士をとってからの日常、CPDについて書ければいいと思っています。あと競馬。

SDカードに光センサモジュール出力を書き込み

いよいよ購入したカードシールドと光センサモジュールを組み合わせたデバイスを作成することにした。


前回参考にしたホームページ
qiita.com

のコードの一部から

・カウントアップの機能を削除

・'SD'の文字追加を光センサモジュールの出力結果(val)にするように変更

・出力ファイルを加工しやすいように「STR.TXT」から「SEN1.CSV」に変更し、光センサモジュールの出力の後ろにカンマを追加するコードを追加


した結果、このようになった。

#include <SD.h>

//---SDCard D4 pin
const int sd_chip_select = 4;

//---テスト用
int test_count = 0;
String test_str = "";

int val=0;

void setup() {

    //---Serialポートを開く
    Serial.begin(9800);
     pinMode(SS, OUTPUT);

    Serial.print(F("SDCard:"));

    //---SDライブラリの初期化エラー
    if(!SD.begin(sd_chip_select)) {

        Serial.println(F(" error..."));

    }else{

        Serial.println(F(" OK"));

        //---ファイル一覧を表示
        Serial.println(F("----------------------------"));
        SdFileList();
        Serial.println(F("----------------------------"));
    }
}

void loop(){
  val=digitalRead(2);
      //---文字列に追記
    test_str += val;
    test_str +=",";

    //---文字列を書き込み
    SdFileWrite("SEN1.csv", test_str);


    Serial.println(F("----------------------------"));

    delay(5000);
}
void SdFileList() {

    File dir = SD.open("/");

    while(1){

        File entry =  dir.openNextFile();

        if(!entry){ break;}

        //---ファイルのみを表示(ファイル名は8文字+3文字)
        if (!entry.isDirectory()) {

            Serial.print('\t'); Serial.print(entry.name());
            Serial.print("\t"); Serial.println(entry.size(), DEC);
        }

        entry.close();
    }
}
String SdFileRead(String p_file_name) {

    String str;

    //---読み込みモードでファイルを開く
    File file = SD.open(p_file_name);

    Serial.print(F("SD FileRead: ")); Serial.print(p_file_name);

    if(file){

        //---1byteずつ読み込んだ文字を結合
        while (file.available()) {

            str += char(file.read());
        }

        Serial.print(F(" > ")); Serial.println(str);

    } else{

        Serial.println(F(" error..."));
    }

    //---ファイルを閉じる
    file.close();

    //---------------------
    //   +返り値
    //---------------------

    return str;
}
void SdFileWrite(String p_file_name, String p_str) {

    //---上書きモードでファイルを開く
    File file = SD.open(p_file_name , FILE_WRITE | O_TRUNC);

    Serial.print(F("SD FileWrite: ")); Serial.print(p_file_name);

    if(file){

        //---書き込み
        file.print(p_str); Serial.print(F(" << ")); Serial.println(p_str);

    } else{

        Serial.println(F(" error..."));
    }

    //---ファイルを閉じる
    file.close();
}

結果、出力
f:id:metaroid:20181119225042j:plain

SDカードファイルにあったCSVファイル
f:id:metaroid:20181119225300j:plain

明日以降でもう少し不要なコードの整理と光センサモジュールの増設を行いたい。