NOBのArduino日記!

NOBのArduino日記!

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

Arduino IDE(SPI: beginTransaction関数の使い方)

■SPI: beginTransaction関数
 SPI: beginTransaction関数は、定義されたSPISettingsを使用してSPIバスを初期化します。

■使用例
 試しにこのプログラムをArduinoUNOで実行すると、各SPIデバイスを一度SPISettingsオブジェクトとして構成します。
 特定のSPIデバイスと通信するには、そのデバイス用に宣言した設定を自動的に使用するSPI.beginTransaction関数を使用します。
 さらに、処理の間SPIを使用する割り込みを無効にします。
 終了したら、SPI.endTransaction関数を使用して、SPIを使用する割り込みを再度有効にします。
 これら操作により互換性の無いSPIデバイスA,B間の通信をArduinoを介して行います。

#include <SPI.h>

// 互換性のない2つのSPIデバイスAとBを使用しています。互換性がないということは、異なるSPI_MODEにする必要があります。
const int slaveAPin = 20;
const int slaveBPin = 21;

// 速度、データの順序とデータモードを設定する
SPISettings settingsA(2000000, MSBFIRST, SPI_MODE1);
SPISettings settingsB(16000000, LSBFIRST, SPI_MODE3);

void setup() {
   // スレーブセレクトピンを出力として設定します。
   pinMode (slaveAPin, OUTPUT);
   pinMode (slaveBPin, OUTPUT);
   // SPIを初期化する
   SPI.begin();
}

uint8_t stat, val1, val2, result;

void loop() {
   // デバイスAから3バイトを読み込む
   SPI.beginTransaction(settingsA);
   digitalWrite (slaveAPin, LOW);
   // 読み取り専用なので、送信されるデータは関係ありません
   stat = SPI.transfer(0);
   val1 = SPI.transfer(0);
   val2 = SPI.transfer(0);
   digitalWrite (slaveAPin, HIGH);
   SPI.endTransaction();
   // statが1または2の場合、val1またはval2に0を送信する
   if (stat == 1) {
       result = val1;
   } else if (stat == 2) {
       result = val2;
   } else {
       result = 0;
   }
   // デバイスBに結果を送る
   SPI.beginTransaction(settingsB);
   digitalWrite (slaveBPin, LOW);
   SPI.transfer(result);
   digitalWrite (slaveBPin, HIGH);
   SPI.endTransaction();
}
イメージ 1
図1:プログラム例

■構文
 SPI.beginTransaction(mySettings)

■パラメータ
 mySettings:SPISettings関数の設定に応じる。

■戻り値
 有りません。 

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

↩【ArduinoIDE reference】目次に戻る