SDカード読込エラーについて

2018年3月23日

ArduinoでSDカードライブラリを使ったファイル読み込み時に、全然読み込めなく四苦八苦したのでここに解決方法を書いておきます。

ArduinoでSDメモリカードを読み書きする
http://arms22.blog91.fc2.com/blog-entry-502.html

主にこのサイトを参考にしました。
 
 
【 エラー原因になるスケッチ(例) 】

void loop()
{
  String a = sd_read("ceilinglight/500.txt");

  if (error == 1) {
    //エラーが発生した場合
    Serial.println(F("Error:SD not open"));
  }
  else {
    //正しく読みこめた場合
    Serial.println(F("SD Read Data:"));
    Serial.println(a);
  }

  error = 0;
  //プログラムをここで終了(停止)
  while (1);
}

これはエラーになったコードの一部です。
(このコードはArduinoIDEにそのままコピペでは使用できません)

スケッチは書き込めるものの、シリアルモニタを見てみると
「Error:SD not open」
と、スケッチで指定しておいたエラー文字が返ってきます。

(ファイルは存在しますが…)
 
 
【 解決方法 】

void loop()
{
  String a = sd_read("clight/500.txt");

  if (error == 1) {
    //エラーが発生した場合
    Serial.println(F("Error:SD not open"));
  }
  else {
    //正しく読みこめた場合
    Serial.println(F("SD Read Data:"));
    Serial.println(a);
  }

  error = 0;
  //プログラムをここで終了(停止)
  while (1);
}

これはエラーが解決されて正しくファイルを読み込めるコードです。

変えたのはほんの一部ですので、見比べても気づかないかもしれません。

実際に変わっていたのは、
読み込むファイル名「String a = sd_read(“ceilinglight/500.txt”);」が「String a = sd_read(“clight/500.txt”);
に短縮されていました。

エラー原因は、ファイル名(フォルダー名)にありました。

参考にしたサイトにもこのような注意は書かれていました↓
「ファイル名は8文字+3文字までです。例えば「filename.txt」はOKですが、「filename_2013.text」はNGです。」
http://arms22.blog91.fc2.com/blog-entry-502.htmlより引用)

ファイル名は8文字、拡張子は3文字までしか対応していないそうです。
でも今回は、「ceilinglight/」と、フォルダーを指定しました。

フォルダー名が何文字まで対応しているかは検証していませんが、フォルダー名にも規制があることは確かです。

以上、ArduinoのSDカード読み込み時のエラーについてでした。