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
※ArduinoUNO等の5V出力マイコンと接続する場合は、
レベルシフタ抵抗の分圧で電圧を3.3Vに下げます。

表1:ArduinoUNOへのSDカード接続方法
microSDカードBreakoutボードArduinoProMini3.3V
DAT0D0MISO
VSSGNDGND
CLKSCKSCK
VDDVcc3.3V
CMDDIMOSI
CD/DAT3CSCS/S

#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
図2:プログラムの内容
SD.begin関数の構文
 SD.begin()
 SD.begin(cspin)

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

SD.begin関数の戻り値
 成功したら「true」、失敗したら「false」。

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