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

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);
  }
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C
led4:A
led4:C
led5:A
led5:C
led6:A
led6:C
led7:A
led7:C
led8:A
led8:C
r1:1
r1:2
r2:1
r2:2
r3:1
r3:2
r4:1
r4:2
r5:1
r5:2
r6:1
r6:2
r7:1
r7:2
r8:1
r8:2
74HC595
sr1:Q1
sr1:Q2
sr1:Q3
sr1:Q4
sr1:Q5
sr1:Q6
sr1:Q7
sr1:GND
sr1:Q7S
sr1:MR
sr1:SHCP
sr1:STCP
sr1:OE
sr1:DS
sr1:Q0
sr1:VCC