NOBのArduino日記!

NOBのArduino日記!

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

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

■SD.begin関数
 SD.begin関数は、SDライブラリとカードを初期化します。
 これは、SPIバス(ほとんどのArduinoボード上のデジタルピン11,12,13、Megaでは50,51,52)とチップセレクト(CS)ピンの使用を開始します。
 これはデフォルトでハードウェアSSピン(ほとんどのArduinoボード上のデジタルピン10、Megaでは53)。
 別のチップセレクトピンを使用しても、ハードウェアSSピンを出力として保持する必要があり、これをしないとSDライブラリの機能が動作しません。

■使用例
  Arduino IDEで使用するSD.begin関数の使い方は以下の通りです。
  試しに図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.begin()
 SD.begin(cspin)

■パラメータ
 cspin(オプション):SDカードのチップセレクトラインに接続されたピン。
           デフォルトはSPIバスのハードウェアSSラインです。

■戻り値
 成功したら「true」、失敗したら「false」。

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

↩【ArduinoIDE reference】目次に戻る