之前做輸入實習時(INPUT_PULLUP),有4個按鍵(如下圖),1個按鍵要佔用 arduino 1個輸出入接腳,4個按鍵要4個輸出入接腳,4個按鍵有一端接在一起直接接地。如果有16個按鍵,此時用16支arduino 接腳,會把 arduino 的接腳給用光,因此必需要使用另外一種方式來處理按鍵輸入(掃描式的輸入方式)。
上圖是 4X4鍵盤的電路圖,當要使用鍵盤掃描時,不會直接將 R1、R2、R3、R4 接地,而是直接接到 arduino 輸出接腳,C1、C2、C3、C4接到 arduino 輸入接腳。
鍵盤掃描程式
/***************************************************/
/* 鍵盤掃描程式,按S1 code=1,按S2 code=2 ... */
/***************************************************/
code = 0 ;
for(int i=0;i<4;i++){
//依序將RS[i]的接腳輸出低電位
digitalWrite(RS[i],LOW);
//依序檢測CS[j]的接腳是否是低電位(是否按鍵)
for(int j=0;j<4;j++){
if(!digitalRead(CS[j])){
code = 1+4*i+j;
Serial.println(code); //這是測試按鍵狀態程式,正式使用時請刪除
delay(500); //這是測試按鍵狀態程式,正式使用時請刪除
break;
}
}
//將RS[i]的接腳輸出高電位
digitalWrite(RS[i],HIGH);
}
程式使用 2 層 for 迴圈來做按鈕輸入檢測工作,第1層 for 迴圈依序令 R1、R2、R3、R4 低電位,第 2 層 for 迴圈分別檢測 C1、C2、C3、C4 是否是低電位。
當 j=0 時,R1低電位(L),R2、R3、R4高電位(H),依序檢測 C1~C4 是否低電位:
i=0,檢測 C1是否低電位,如果是低電位表示 S1 按下;code = 1+4*0+0 =1
i=1,檢測 C2是否低電位,如果是低電位表示 S2 按下;code = 1+4*0+1 =2
i=2,檢測 C3是否低電位,如果是低電位表示 S3 按下;code = 1+4*0+2 =3
i=3,檢測 C4是否低電位,如果是低電位表示 S4 按下;code = 1+4*0+3 =4
當 j=1 時,R2低電位(L),R1、R3、R4高電位(H),依序檢測 C1~C4 是否低電位:
i=0,檢測 C1是否低電位,如果是低電位表示 S5 按下;code = 1+4*1+0 =5
i=1,檢測 C2是否低電位,如果是低電位表示 S6 按下;code = 1+4*1+1 =6
i=2,檢測 C3是否低電位,如果是低電位表示 S7 按下;code = 1+4*1+2 =7
i=3,檢測 C4是否低電位,如果是低電位表示 S8 按下;code = 1+4*1+3 =8
當 j=2 時,R3低電位(L),R1、R2、R4高電位(H),依序檢測 C1~C4 是否低電位:
i=0,檢測 C1是否低電位,如果是低電位表示 S9 按下;code = 1+4*2+0 =9
i=1,檢測 C2是否低電位,如果是低電位表示 S10 按下;code = 1+4*2+1 =10
i=2,檢測 C3是否低電位,如果是低電位表示 S11 按下;code = 1+4*2+2 =11
i=3,檢測 C4是否低電位,如果是低電位表示 S12 按下;code = 1+4*2+3 =12
當 j=3 時,R4低電位(L),R1~R3高電位(H),依序檢測 C1~C4 是否低電位:
i=0,檢測 C1是否低電位,如果是低電位表示 S13 按下;code = 1+4*3+0 =13
i=1,檢測 C2是否低電位,如果是低電位表示 S14 按下;code = 1+4*3+1 =14
i=2,檢測 C3是否低電位,如果是低電位表示 S15 按下;code = 1+4*3+2 =15
i=3,檢測 C4是否低電位,如果是低電位表示 S16 按下;code = 1+4*3+3 =16
Arduino 輸出實習(單燈閃爍)
Arduino 輸出實習(跑馬燈-愚公移山)
Arduino 輸出實習(跑馬燈-for迴圈)
Arduino 數位輸入實習
Arduino 數位輸入實習(INPUT_PULLUP)
Arduino 類比輸入實習
Arduino PWM 實習 (呼吸燈)
Arduino PWM 實習 (光感應調光燈)
Arduino 8×8 LED Matrix MAX7219 實習
Arduino 紅綠燈小綠人 實習
Arduino 計時器 實習
Arduino 音樂盒
Arduino 電子琴(鍵盤掃描)
Arduino DHT11 溫濕度感應器
Arduino OLED 顯示
Arduino 超音波測距模組 HC-SR04
Arduino 執行時間實習
Arduino 電容測試器
Arduino 紅外線接收實習
Arduino 紅外線發射實習 EPSON 投影機控制
ESP-12F 網路智慧開關(MQTT)
ESP-12F 雲端記錄型 K-Type 溫度計(MQTT ThingSpeak)
ESP-12F 手機雲端紅外線控制
ESP-12F 網路電台收音機
ESP-12F 電子鼓