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カード読み込み時のエラーについてでした。
















エラー原因は、ファイルパスにあったんです!!