🛠️
SPI 操作の原始的な書き方をリファクタリングする
原始的な書き方
#define PIN_CLK 13
#define PIN_DIN 11
#define PIN_CS 10
void setup() {
pinMode(PIN_CS, OUTPUT);
pinMode(PIN_CLK, OUTPUT);
pinMode(PIN_DIN, OUTPUT);
digitalWrite(PIN_CS, HIGH);
digitalWrite(PIN_CLK, LOW);
digitalWrite(PIN_DIN, LOW);
digitalWrite(PIN_CS, LOW);
shiftOut(PIN_DIN, PIN_CLK, MSBFIRST, 123);
digitalWrite(PIN_CS, HIGH);
}
setup 内の最初の 6 行が初期化処理になるが明瞭性は皆無である。
定数は定義済みのものを使う
void setup() {
pinMode(SS, OUTPUT);
pinMode(SCK, OUTPUT);
pinMode(MOSI, OUTPUT);
digitalWrite(SS, HIGH);
digitalWrite(SCK, LOW);
digitalWrite(MOSI, LOW);
digitalWrite(SS, LOW);
shiftOut(MOSI, SCK, MSBFIRST, 123);
digitalWrite(SS, HIGH);
}
SPI 用のピンの位置はぜんぶ決まっているのでせめて用意された定義を使いたい。
既存ライブラリに置き換える
#include <SPI.h>
void setup() {
SPI.begin();
SPI.setBitOrder(MSBFIRST);
digitalWrite(SS, LOW);
SPI.transfer(123);
digitalWrite(SS, HIGH);
}
- SPI ライブラリは Arduino に標準で入っている
- setup 内の最初の 6 行は
SPI.begin
がやってくれる - shiftOut は
SPI.transfer
に置き換える - 流す方向は
SPI.setBitOrder
にあらかじめ指定しておく
参照
Discussion