電子式開關
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 矩陣