NOBのArduino日記!

NOBのArduino日記!

趣味は車・バイク・自転車・ラジコン・電子工作です。

Arduino IDE(file.flush関数の使い方)

■file.flush関数
 SD:FileClassのfile.flush関数は、ファイルに書き込まれたバイトが物理的にSDカードに保存されることを保証します。
 これは、ファイルが閉じられると自動的に行われます。
 flush関数はStreamユーティリティークラスから継承します。

■使用例
  Arduino IDEで使用するfile.flush関数の使い方は以下の通りです。
    試しに図1の様にmicroSDカードとArduino UNOを接続し下記プログラムを実行すると、SD.begin関数でmicroカードが存在するか確認し初期化します。
 次にシリアルモニタにSDカード内のファイル一覧が表示されます。
 この時SdFileList関数中のentry.close関数によって現在開かれているファイル「entry」を閉じ、それと同時にfile.flush関数が実行されます。

イメージ 1
図1:SparkFun microSD Transflash BreakoutArduinoProMini3.3Vの接続例
ArduinoUNO等の5V出力マイコンと接続する場合は、
レベルシフタか抵抗の分圧で電圧を3.3Vに下げます。
表1:ArduinoUNOへのSDカード接続方法
microSDカード Breakoutボード ArduinoProMini3.3V
DAT0 D0 MISO
VSS GND GND
CLK SCK SCK
VDD Vcc 3.3V
CMD DI MOSI
CD/DAT3 CS CS/S

Breakoutボードに関する詳細はコチラ

#include <SD.h>
const int sd_chip_select = 4;//SDCard D4 pin
int test_count = 0;
String test_str = "";

void setup() {
   Serial.begin(9600);
   pinMode(SS, OUTPUT);
   Serial.print(F("SDCard:"));
   if (!SD.begin(sd_chip_select)) {
       Serial.println(F(" error..."));
   } else {
       Serial.println(F(" OK"));
       Serial.println(F("----------------------------"));
       SdFileList();
       Serial.println(F("----------------------------"));
   }
}

void loop() {
   test_count = SdFileRead("COUNT.TXT").toInt();//カウンタを読み込み
   test_count++;
   SdFileWrite("COUNT.TXT", String(test_count));
   test_str = SdFileRead("STR.TXT");
   test_str += "SD";
   SdFileWrite("STR.TXT", test_str);
   Serial.println(F("----------------------------"));
   delay(3000);
}

void SdFileList() {   //SDファイル一覧
   File dir = SD.open("/");
   while (1) {
       File entry =   dir.openNextFile();
       if (!entry) {
           break;
       }
       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) {   //SDファイル読み込み
   String str;
   File file = SD.open(p_file_name);
   Serial.print(F("SD FileRead: ")); Serial.print(p_file_name);
   if (file) {
       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) {   //SDファイル書き込み
   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();
}
イメージ 1
図1:プログラム例

■構文
 file.flush()

■パラメータ
 file:Fileクラスのインスタンス(SD.open関数によって返されます)

■戻り値
 特に無し

イメージ 1 イメージ 3
励みになりますのでよければクリック下さい(^o^)/

↩【ArduinoIDE reference】目次に戻る