int latchPin = 11; //ラッチ入力
int clockPin = 9; //クロック入力
int dataPin = 12; //データ入力
byte data = 0b00000000; // 0bは2進数を表すプレフィックス。各LEDに送る8ビットのデータ。
void updateLSBFIRST(){
digitalWrite(latchPin, LOW); // ラッチをLOWにしてデータ転送を開始
shiftOut(dataPin, clockPin, LSBFIRST, data); // データをシフトレジスタにシフトアウト
digitalWrite(latchPin, HIGH); // ラッチをHIGHにしてシフトレジスタから出力
}
void updateMSBFIRST(){
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, data);
digitalWrite(latchPin, HIGH);
}
//初期化
void initialize(){
data = 0b00000000;
updateLSBFIRST(); //LSBでもMSBでもどちらでも良い
delay(1000);
}
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
}
void loop() {
initialize();
//dataのビットの並びと、LSBFIRSTに注目
for (int i = 0; i < 8; i++){
bitSet(data, i); //dataのi番目のビットを1にセットする関数です。
updateLSBFIRST();
delay(200);
}
initialize();
//dataのビットの並びと、MSBFIRSTに注目
for (int i = 0; i < 8; i++){
bitSet(data, i); //dataのi番目のビットを1にセットする関数です。
updateMSBFIRST();
delay(200);
}
initialize();
//その他の制御方法
data = 0b00000001;
for (int i = 0; i < 8; i++){
updateLSBFIRST();
data = data << 1; //データを左にシフトする 00000001 は 00000010になる
delay(500);
}
}