SD(File操作)

SDカードやMMCカードをファイルクラスで操作できるライブラリです。

使用する場合は、ライブラリとしてインポートして、#include <sdmmc.h>を記述してください。また、ファイルのオブジェクトはSDMMC.openか、file.openNextFileで返されるものを使用してください。サンプルを参照してください。

available

概要
読み出せるデータがあるかどうか調べます。
文法
file.available()
パラメータ
file: Fileクラスで作ったインスタンス(SD.open()のリターン)
戻り値
有効なバイト数。(int)

close

概要
ファイルを閉じる。SDカードにデータきちんと書かれてから行ってください。
文法
file.close()
パラメータ
なし
戻り値
なし

flush

概要
未書き込みのデータをファイルに書き込みます。この処理はファイルクローズ時に自動で行われます。
文法
file.flush()
パラメータ
なし
戻り値
なし

peek

概要
1バイト読みますが、次回読む位置は変わりません。
文法
file.peek()
パラメータ
なし
戻り値
読んだデータ。データがなければ-1を返す。

position

概要
ファイルからの読み出し位置を取得します。
文法
file.position()
パラメータ
なし
戻り値
ファイル内の読み出し位置。(unsigned long)

print

概要
ファイルにデータを送る。数字はそれぞれASCIIコードとしてデータを送る。例えば123は'1','2','3'として送られる。
文法
file.print(data)
file.print(data, BASE)
パラメータ
data: 文字列や数値
BASE: 基数(BYTE、BIN、DEC、HEX、OCT)
戻り値
送ったバイト数。あまり読む必要はない。

println

概要
ファイルに改行付きでデータを送る。数字はそれぞれASCIIコードとしてデータを送る。例えば123は'1','2','3'として送られる。
文法
file.println(data)
file.println(data, BASE)
パラメータ
data: 文字列や数値
BASE: 基数(BYTE、BIN、DEC、HEX、OCT)
戻り値
送ったバイト数。あまり読む必要はない。

seek

概要
ファイル内の新しい位置に移動します。位置は0からファイルサイズ内の必要があります。
文法
file.seek(unsigned long pos)
パラメータ
pos: ファイルの先頭から数えた読み出し位置(unsigned long)
戻り値
成功したらtrue、失敗したらfalseを返す。

size

概要
ファイルのサイズを取得します。
文法
file.size()
パラメータ
なし
戻り値
ファイルのサイズ(unsigned long)

read

概要
ファイルから1バイト読み込みます。
文法
file.read()
パラメータ
なし
戻り値
データがあればデータを返します。ファイルの終わりに達していたら-1を返します。

write

概要
ファイルにデータや文字列を書き込みます。
文法
file.write(data)
file.write(*buf, len)
パラメータ
data: データや文字列(char*)
buf: 書き込みデータ(unsigned char*)が格納されたバッファ
len: 書き込みたい長さ
戻り値
書き込んだバイト数。あまり読む必要はない。

isDirectory

概要
開いているファイルオブジェクトが、ファイルかディレクトリか調べます。
文法
file.isDirectory()
パラメータ
なし
戻り値
ディレクトリならtrue、ファイルならfalseを返します。

openNextFile

概要
ディレクトリ内の、次のファイルかフォルダを返します。
文法
file.openNextFile()
パラメータ
なし
戻り値
該当するディレクトリ内の次のファイルかフォルダー。

rewindDirectory

概要
ディレクトリの最初に戻します。openNextFile()と組み合わせて使われます。
文法
file.rewindDirectory()
パラメータ
なし
戻り値
なし

サンプルプログラム

LYCHEEボードの裏面にあるマイクロSDにアクセスして、書き込み、読み込み、サイズ調査、削除など、一連の動作を試すサンプルです。


#include <Arduino.h>
#include <SD.h>
 
void setup(){
    Serial.begin(9600);
    while(!Serial.available()); // wait to press key
    Serial.read(); //dummy
     
    if(!SD.begin()){
        Serial.println("Card failed, or not present.");
        while(1);
    }
}
      
void loop(){
    File file = SD.open("sample.txt", FILE_WRITE);
  
    if(file){
        //Write
        Serial.println("Success to open sample.txt and write hello.");
        file.println("Hello, my SD");
        file.close();
         
        //Read
        file = SD.open("sample.txt", FILE_READ);
        Serial.println("Reading file...");
        while(file.available()){
            Serial.print((char)file.read());
            delay(50);
        }
        Serial.println();
         
        //Size
        Serial.print("File Size:");
        Serial.println(file.size());
        file.close();
        digitalWrite(PIN_LED0, 0);
         
        //Remove
        Serial.println("Remove the file? y/n");
        while(!Serial.available());
        if(Serial.read() == 'y'){
            SD.remove("sample.txt");
            Serial.println("sample.txt has been removed");
        }
        delay(400);
 
    } else {
        Serial.println("Failed to open file.");
        digitalWrite(PIN_LED0, 0);
        while(1);
    }
}