NOBのArduino日記!

NOBのArduino日記!

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

Arduino IDE(SD.open関数の使い方)

■SD.open関数
 SD.open関数は、書き込み用ファイルが存在する場合はファイルを開きます。
 ファイルが存在しない場合は作成されます。※ファイルが存在するディレクトリが既に存在している必要があります。

■使用例
 Arduino IDEで使用するSD.open関数の使い方は以下の通りです。
  試しに図1の様にmicroSDカードとArduino UNOを接続し下記プログラムを実行すると、SD.begin関数でmicroカードが存在するか確認し初期化します。
 次にArduinoProMini3.3VのA0~A2ピンに入力した電圧をanalogRead関数で読み取り、 SD.open関数で「datalog.txt」ファイルを開き、「dataFile」が利用可能な場合はそのファイルにdataFile.println関数でデータを書き込み、dataFile.close関数でファイルを閉じます。

イメージ 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 <SPI.h>
#include <SD.h>

//イーサネットシールドでは、CSはピン4です。CSピンとして使用されていなくても、ハードウェアCSピン(ほとんどのArduinoボードでは10、メガでは53)を出力のままにする必要があります。
const int chipSelect = 8;

void setup() {
   // シリアル通信を開き、ポートが開くのを待ちます
   Serial.begin(9600);
   while (!Serial) {
       ; // シリアルポートが接続するのを待ちます。レオナルドのみに必要
   }

   Serial.print("Initializing SD card...");
   // デフォルトのチップセレクトピンが使用されていない場合でも、それが出力に設定されていることを確認してください。
   pinMode(10, OUTPUT);

   // 使用するchipSelectピンも出力に設定する必要があります。
   pinMode(chipSelect, OUTPUT);

   // カードが存在し、初期化できるかどうか確認してください。
   if (!SD.begin(chipSelect)) {
       Serial.println("Card failed, or not present");
       // 何もしないでください
       return;
   }
   Serial.println("card initialized.");
}

void loop() {
   // ログにデータを組み立てるための文字列を作成します。
   String dataString = "";

   // 3つのセンサーを読み取り、文字列に追加します。
   for (int analogPin = 0; analogPin < 3; analogPin++) {
       int sensor = analogRead(analogPin);
       dataString += String(sensor);
       if (analogPin < 2) {
           dataString += ",";
       }
   }

   // ファイルを開きます。一度に開くことができるファイルは1つだけなので、別のファイルを開く前にこのファイルを閉じる必要があります。
   File dataFile = SD.open("datalog.txt", FILE_WRITE);

   // ファイルが利用可能な場合は、そのファイルに書き込みます。
   if (dataFile) {
       dataFile.println(dataString);
       dataFile.close();
       // シリアルポートにも出力します
       Serial.println(dataString);
   }

   // ファイルが開いていない場合は、エラーをポップアップします。
   else {
       Serial.println("error opening datalog.txt");
   }
}
イメージ 1
図1:プログラム例

■構文
 SD.open(filepath)
 SD.open(filepath, mode)

■パラメータ
 filename:開くファイルの名前。(char *)
      ※ディレクトリ(”/”で区切られたもの)を含む事が出来る。

 mode(オプション):ファイルを開くモードで、デフォルトはFILE_READ (byte)
 FILE_READ:ファイルの先頭から読み込み用にファイルを開きます。
 FILE_WRITE:ファイルの最後から読み書き用にファイルを開きます。

■戻り値
 開いたファイルを参照するFileオブジェクト。
 ファイルがオープンできなかった場合、このオブジェクトはbooleanコンテキストでfalseと評価されます。
 つまり、if関数中で戻り値をテストできます。

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

↩【ArduinoIDE reference】目次に戻る