// --------------------------------------------------------------------------------
/*

09 以 3 個 Pin 控制 8 顆 LED

[學習重點]

1. 可以透過其他集成電路減少佔用的 Pin

[挑戰]

- 自行設計不同款式的走馬燈
- 試增加多 8 顆 LED 並改寫程式


Created by Jason on 9 Aug 2022.

*/
// --------------------------------------------------------------------------------

int latchPin = 12; // 接 74HC595 的 STCP (IC pin 12)
int clockPin = 13; // 接 74HC595 的 SHCP (IC pin 11)
int dataPin = 10; // 接 74HC595 的 DS (IC pin 14)

byte patterns[30] = {
B10000000,
B01000000,
B00100000,
B00010000,
B00001000,
B00000100,
B00000010,
B00000001,
};

void setup()
{
  // 將 latchPin, clockPin, dataPin 設置為輸出
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop()
{
  for (int i = 0; i < 8; i++) {
    digitalWrite(latchPin, LOW); // 送資料前要先降低 latchPin 電壓
    shiftOut(dataPin, clockPin, MSBFIRST, patterns[i]);
    digitalWrite(latchPin, HIGH); // 送完資料後要把 latchPin 電壓升高
    delay(500);
  }
}
74HC595