電子式開關
2n2222:npn型的電晶體當作開關,B 極輸出 HIGH/LOW 開關 E/C 極通道
Q:設想用 8 個電晶體控制 4 * 4 的 LED 矩陣
int v1Pin=8,v2Pin=9,v3Pin=10,v4Pin=11;int h1Pin=4,h2Pin=5,h3Pin=6,h4Pin=7;int dt=20; //調整 dt 的值讓整頁的圖形不會閃爍int loopCnt=200; //改變 loopCnt 的值調整頁面切換的速度void setup() { pinMode(v1Pin,OUTPUT); pinMode(v2Pin,OUTPUT); pinMode(v3Pin,OUTPUT); pinMode(v4Pin,OUTPUT); pinMode(h1Pin,OUTPUT); pinMode(h2Pin,OUTPUT); pinMode(h3Pin,OUTPUT); pinMode(h4Pin,OUTPUT);}void loop() { //page 1 for(int a=0;a<loopCnt;a++){ digitalWrite(v1Pin, HIGH); digitalWrite(v2Pin, HIGH); digitalWrite(h1Pin, HIGH); delay(dt); lightOff(); digitalWrite(v2Pin, HIGH); digitalWrite(v3Pin, HIGH); digitalWrite(h2Pin, HIGH); delay(dt); lightOff(); } //page 2 for(int a=0;a<loopCnt;a++){ digitalWrite(v2Pin, HIGH); digitalWrite(v3Pin, HIGH); digitalWrite(h2Pin, HIGH); delay(dt); lightOff(); digitalWrite(v3Pin, HIGH); digitalWrite(v4Pin, HIGH); digitalWrite(h3Pin, HIGH); delay(dt); lightOff(); } }void lightOff(){ digitalWrite(v1Pin, LOW); digitalWrite(v2Pin, LOW); digitalWrite(v3Pin, LOW); digitalWrite(v4Pin, LOW); digitalWrite(h1Pin, LOW); digitalWrite(h2Pin, LOW); digitalWrite(h3Pin, LOW); digitalWrite(h4Pin, LOW);}光耦 PC817
IC 元件的識別缺口朝上時,左側最上方的接腳為接腳1,其他接腳則以逆時針的順序依序編號。有時接腳1也會以圓點作為標示。
int optocouplerPin=8;void setup() { pinMode(optocouplerPin,OUTPUT);}void loop() { digitalWrite(optocouplerPin, HIGH); delay(1000); digitalWrite(optocouplerPin, LOW); delay(1000);}編碼器 74HC595
IC 有作用時,MR 電位必須拉高(HIGH),所以直接跟5V短路
腳位編號 名稱 說明
1-7, 15 Q1 ~ Q7, Q0 輸出腳位
8 GND 接地
9 Q7’ 序列輸出 (Serial Out)
10 MR Master Reset, 清除所有資料, 低電位有效 (Active low)
11 SH_CP SHift register clock pin (Clock Pin)
12 ST_CP STorage register clock pin (Latch Pin)
13 OE Output Enable, 允許輸出,低電位有效 (Active low)
14 DS 序列資料輸入 (Serial data input)
16 Vcc 供應電壓
const int dataPin = 9;const int latchPin = 10;const int clockPin = 11;//試著改變 dt 的值,找到可以騙過眼睛造成視覺暫留的門檻值int dt = 50;void setup() { pinMode(latchPin,OUTPUT); pinMode(clockPin,OUTPUT); pinMode(dataPin,OUTPUT);}void loop() { for(int a=0;a<256;a++){ //把 latch 電位拉低開始傳送資料 digitalWrite(latchPin, LOW); //傳送資料 shiftOut(dataPin, clockPin, MSBFIRST, a); /* MSBFIRST的意思是most significant bit first,也就是最先輸出的會是number (是個uint8_t,有8個bits,第7個bit是MSB,第0個bit是LSB)的第7個bit。如果改用 LSBFIRST(least significant bit first),那麼最先輸出的會是第0個 */ //把 latch 電位拉高結束傳送資料 digitalWrite(latchPin, HIGH); delay(dt); }}Q:設想用 1 個 74HC595 IC 控制 4 * 4 的 LED 矩陣
Q:設計自己的 7 段 LED 一位數字顯示器
選擇器 CD4051
int dt=20;void setup() { pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(8, OUTPUT);}void loop() { // 12 11 10 // 0 0 0 // 0 0 1 // 0 1 0 // 0 1 1 // 1 0 0 // 1 0 1 // 1 1 0 // 1 1 1 digitalWrite(10,LOW); digitalWrite(11,LOW); digitalWrite(12,LOW); delay(dt); digitalWrite(10,HIGH); digitalWrite(11,LOW); digitalWrite(12,LOW); delay(dt); digitalWrite(10,LOW); digitalWrite(11,HIGH); digitalWrite(12,LOW); delay(dt); digitalWrite(10,HIGH); digitalWrite(11,HIGH); digitalWrite(12,LOW); delay(dt); digitalWrite(10,LOW); digitalWrite(11,LOW); digitalWrite(12,HIGH); delay(dt); digitalWrite(10,HIGH); digitalWrite(11,LOW); digitalWrite(12,HIGH); delay(dt); digitalWrite(10,LOW); digitalWrite(11,HIGH); digitalWrite(12,HIGH); delay(dt); digitalWrite(10,HIGH); digitalWrite(11,HIGH); digitalWrite(12,HIGH); delay(dt);}Q:設想用 1 個 74HC595 + CD4051 IC 控制 8 * 8 的 LED 矩陣