SlideShare a Scribd company logo
電子工程系應 用 電 子 組
電 腦 遊 戲 設 計 組
AMA中級術科實作II
(矩陣按鍵控制USB風扇)
吳錫修
Sep 30, 2016
shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
 過按鍵控制風扇轉動,在七段顯示器上顯示風扇轉動狀態,並且由
蜂鳴器提示按鍵聲音
AMA Fundamentals術科功能需求
2
按鍵 風扇 七段顯示器 蜂鳴器
1 正轉(送風) F 500Hz, 0.3秒
2 停止 S 500Hz, 1秒
3 反轉(抽風) b
500Hz, 0.3秒,
2次,間隔0.1秒
shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
 必須外接VDD
矩陣式鍵盤電路
3
VDD
0
1
2
3
7
6
5
4
shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
 檢查row 0按鍵動作
 pin 0送出LOW
 當row 0中的按鍵被按,對應的pin 4~pin 7為低電位
矩陣式鍵盤掃描原理 1/4
4
VDD
0
1
2
3
7
6
5
4
shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
 檢查row 1按鍵動作
 pin 1送出LOW
 當row 1中的按鍵被按,對應的pin 4~pin 7為低電位
矩陣式鍵盤掃描原理 2/4
5
VDD
0
1
2
3
7
6
5
4
shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
 檢查row 2按鍵動作
 pin 2送出LOW
 當row 2中的按鍵被按,對應的pin 4~pin 7為低電位
矩陣式鍵盤掃描原理 3/4
6
VDD
0
1
2
3
7
6
5
4
shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
 檢查row 3按鍵動作
 pin 3送出LOW
 當row 3中的按鍵被按,對應的pin 4~pin 7為低電位
矩陣式鍵盤掃描原理 4/4
7
VDD
0
1
2
3
7
6
5
4
shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
 只需使用key1~key3
 需外接VDD
 將pin 0直接接地
 讀取pin 4~pin 6按鍵狀態
 LOW表示按鍵被按下
AMA Fundamentals鍵盤輸入控制
8
VDD
0
6
5
4
shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
 應避免開關彈跳問題,及重複按同⼀按鍵造成誤動作
 加延遲及狀態辨識
按鍵彈跳處理
9
shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
 if (條件式){
條件成立時所要執行之作業
}
例如:
if (digitalRead(KEY1)==0 && mode!=1) {
mode=1; // 設定mode為1,避免重複動作
digitalWrite(IN1, HIGH); // 風扇正轉(送風)
digitalWrite(IN2, LOW);
}
if指令
10
shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
 硬體接線
 依據題組指定之IO埠腳位接線 (以題組A為例)
 風扇模組接線
實作 1/8
11
接USB風扇(程式燒錄完成再接)
Mini USB供電(程式燒錄完成再接)
接Arduino D13
接Arduino D12
接Arduino GND
馬達驅動模組
HT6751
七段顯示器模組 蜂
鳴
器
矩陣按鍵
IN1 IN2 IN3 dp g f e d c b a com KEY1-3
D13 D12 GND D6:D7 A0:A5 1 D5 D2,D3,D4
shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
 按鍵模組接線
實作 2/8
12
接Arduino 5V
接Arduino GND
接GND
接Arduino D2
接Arduino D3
接Arduino D4
馬達驅動模組
HT6751
七段顯示器模組 蜂
鳴
器
矩陣按鍵
IN1 IN2 IN3 dp g f e d c b a com KEY1-3
D13 D12 GND D6:D7 A0:A5 1 D5 D2,D3,D4
shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
 開啟Examdata.ino檔
 修改Examdata.ino開頭註解中之姓名、IO埠編號、准考證號碼
/*=============================================
姓名:○○○ 術科准考證號碼:123456789
指定I/O埠編號:A/B/C
=============================================*/
 以准考證號碼做為檔名,另存新檔
實作 3/8
13
shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
 參照題組IO埠編號,修改config.h檔
#define IN1 13 // 宣告連接馬達控制端1之腳位
#define IN2 12 // 宣告連接馬達控制端2之腳位
#define Buzzer 5 // 宣告蜂鳴器之腳位
#define KEY1 2 // 宣告按鍵1之腳位
#define KEY2 3 // 宣告按鍵2之腳位
#define KEY3 4 // 宣告按鍵3之腳位
#define seg_a A5 // 宣告7段顯示器seg_a之腳位
#define seg_b A4
#define seg_c A3
#define seg_d A2
#define seg_e A1
#define seg_f A0
#define seg_g 7
#define seg_dp 6
實作 4/8
14
馬達驅動模組
HT6751
七段顯示器模組 蜂
鳴
器
矩陣按鍵
IN1 IN2 IN3 dp g f e d c b a com KEY1-3
D13 D12 GND D6:D7 A0:A5 1 D5 D2,D3,D4
shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
 宣告變數
#include "config.h"
byte mode = 0;
byte i;
byte seg7[] = {seg_a, seg_b, seg_c, seg_d, seg_e, seg_f, seg_g};
實作 5/8
15
shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
 在setup()中使用pinMode()指令設定Arduino IO腳位之IO方
向
void setup() {
pinMode(IN1, OUTPUT); // 設定風扇控制腳為輸出
pinMode(IN2, OUTPUT);
pinMode(KEY1, INPUT); // 設定按鍵控制腳為輸入
pinMode(KEY2, INPUT);
pinMode(KEY3, INPUT);
}
實作 6/8
16
shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
 在loop()中依據按鍵狀態控制風扇
void loop() {
if (digitalRead(KEY1)==0 && mode!=1) {
mode=1; // 設定mode為1,避免重複動作
digitalWrite(IN1, HIGH); // 風扇正轉(送風)
digitalWrite(IN2, LOW);
delay(300);
}
else if (digitalRead(KEY2)==0 && mode!=2) {
mode=2; // 設定mode為2,避免重複動作
digitalWrite(IN1, LOW); // 風扇停止
digitalWrite(IN2, LOW);
delay(300);
}
實作 7/8
17
shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
else if (digitalRead(KEY3)==0 && mode!=3) {
mode=3; // 設定mode為3,避免重複動作
digitalWrite(IN1, LOW); // 風扇反轉(吸風)
digitalWrite(IN2, HIGH);
delay(300);
}
}
實作 8/8
18

More Related Content

AMA 中級術科實作II

  • 1. 電子工程系應 用 電 子 組 電 腦 遊 戲 設 計 組 AMA中級術科實作II (矩陣按鍵控制USB風扇) 吳錫修 Sep 30, 2016
  • 2. shapethefuture 電子工程系 應 用 電 子 組 電 腦 遊 戲 設 計 組  過按鍵控制風扇轉動,在七段顯示器上顯示風扇轉動狀態,並且由 蜂鳴器提示按鍵聲音 AMA Fundamentals術科功能需求 2 按鍵 風扇 七段顯示器 蜂鳴器 1 正轉(送風) F 500Hz, 0.3秒 2 停止 S 500Hz, 1秒 3 反轉(抽風) b 500Hz, 0.3秒, 2次,間隔0.1秒
  • 3. shapethefuture 電子工程系 應 用 電 子 組 電 腦 遊 戲 設 計 組  必須外接VDD 矩陣式鍵盤電路 3 VDD 0 1 2 3 7 6 5 4
  • 4. shapethefuture 電子工程系 應 用 電 子 組 電 腦 遊 戲 設 計 組  檢查row 0按鍵動作  pin 0送出LOW  當row 0中的按鍵被按,對應的pin 4~pin 7為低電位 矩陣式鍵盤掃描原理 1/4 4 VDD 0 1 2 3 7 6 5 4
  • 5. shapethefuture 電子工程系 應 用 電 子 組 電 腦 遊 戲 設 計 組  檢查row 1按鍵動作  pin 1送出LOW  當row 1中的按鍵被按,對應的pin 4~pin 7為低電位 矩陣式鍵盤掃描原理 2/4 5 VDD 0 1 2 3 7 6 5 4
  • 6. shapethefuture 電子工程系 應 用 電 子 組 電 腦 遊 戲 設 計 組  檢查row 2按鍵動作  pin 2送出LOW  當row 2中的按鍵被按,對應的pin 4~pin 7為低電位 矩陣式鍵盤掃描原理 3/4 6 VDD 0 1 2 3 7 6 5 4
  • 7. shapethefuture 電子工程系 應 用 電 子 組 電 腦 遊 戲 設 計 組  檢查row 3按鍵動作  pin 3送出LOW  當row 3中的按鍵被按,對應的pin 4~pin 7為低電位 矩陣式鍵盤掃描原理 4/4 7 VDD 0 1 2 3 7 6 5 4
  • 8. shapethefuture 電子工程系 應 用 電 子 組 電 腦 遊 戲 設 計 組  只需使用key1~key3  需外接VDD  將pin 0直接接地  讀取pin 4~pin 6按鍵狀態  LOW表示按鍵被按下 AMA Fundamentals鍵盤輸入控制 8 VDD 0 6 5 4
  • 9. shapethefuture 電子工程系 應 用 電 子 組 電 腦 遊 戲 設 計 組  應避免開關彈跳問題,及重複按同⼀按鍵造成誤動作  加延遲及狀態辨識 按鍵彈跳處理 9
  • 10. shapethefuture 電子工程系 應 用 電 子 組 電 腦 遊 戲 設 計 組  if (條件式){ 條件成立時所要執行之作業 } 例如: if (digitalRead(KEY1)==0 && mode!=1) { mode=1; // 設定mode為1,避免重複動作 digitalWrite(IN1, HIGH); // 風扇正轉(送風) digitalWrite(IN2, LOW); } if指令 10
  • 11. shapethefuture 電子工程系 應 用 電 子 組 電 腦 遊 戲 設 計 組  硬體接線  依據題組指定之IO埠腳位接線 (以題組A為例)  風扇模組接線 實作 1/8 11 接USB風扇(程式燒錄完成再接) Mini USB供電(程式燒錄完成再接) 接Arduino D13 接Arduino D12 接Arduino GND 馬達驅動模組 HT6751 七段顯示器模組 蜂 鳴 器 矩陣按鍵 IN1 IN2 IN3 dp g f e d c b a com KEY1-3 D13 D12 GND D6:D7 A0:A5 1 D5 D2,D3,D4
  • 12. shapethefuture 電子工程系 應 用 電 子 組 電 腦 遊 戲 設 計 組  按鍵模組接線 實作 2/8 12 接Arduino 5V 接Arduino GND 接GND 接Arduino D2 接Arduino D3 接Arduino D4 馬達驅動模組 HT6751 七段顯示器模組 蜂 鳴 器 矩陣按鍵 IN1 IN2 IN3 dp g f e d c b a com KEY1-3 D13 D12 GND D6:D7 A0:A5 1 D5 D2,D3,D4
  • 13. shapethefuture 電子工程系 應 用 電 子 組 電 腦 遊 戲 設 計 組  開啟Examdata.ino檔  修改Examdata.ino開頭註解中之姓名、IO埠編號、准考證號碼 /*============================================= 姓名:○○○ 術科准考證號碼:123456789 指定I/O埠編號:A/B/C =============================================*/  以准考證號碼做為檔名,另存新檔 實作 3/8 13
  • 14. shapethefuture 電子工程系 應 用 電 子 組 電 腦 遊 戲 設 計 組  參照題組IO埠編號,修改config.h檔 #define IN1 13 // 宣告連接馬達控制端1之腳位 #define IN2 12 // 宣告連接馬達控制端2之腳位 #define Buzzer 5 // 宣告蜂鳴器之腳位 #define KEY1 2 // 宣告按鍵1之腳位 #define KEY2 3 // 宣告按鍵2之腳位 #define KEY3 4 // 宣告按鍵3之腳位 #define seg_a A5 // 宣告7段顯示器seg_a之腳位 #define seg_b A4 #define seg_c A3 #define seg_d A2 #define seg_e A1 #define seg_f A0 #define seg_g 7 #define seg_dp 6 實作 4/8 14 馬達驅動模組 HT6751 七段顯示器模組 蜂 鳴 器 矩陣按鍵 IN1 IN2 IN3 dp g f e d c b a com KEY1-3 D13 D12 GND D6:D7 A0:A5 1 D5 D2,D3,D4
  • 15. shapethefuture 電子工程系 應 用 電 子 組 電 腦 遊 戲 設 計 組  宣告變數 #include "config.h" byte mode = 0; byte i; byte seg7[] = {seg_a, seg_b, seg_c, seg_d, seg_e, seg_f, seg_g}; 實作 5/8 15
  • 16. shapethefuture 電子工程系 應 用 電 子 組 電 腦 遊 戲 設 計 組  在setup()中使用pinMode()指令設定Arduino IO腳位之IO方 向 void setup() { pinMode(IN1, OUTPUT); // 設定風扇控制腳為輸出 pinMode(IN2, OUTPUT); pinMode(KEY1, INPUT); // 設定按鍵控制腳為輸入 pinMode(KEY2, INPUT); pinMode(KEY3, INPUT); } 實作 6/8 16
  • 17. shapethefuture 電子工程系 應 用 電 子 組 電 腦 遊 戲 設 計 組  在loop()中依據按鍵狀態控制風扇 void loop() { if (digitalRead(KEY1)==0 && mode!=1) { mode=1; // 設定mode為1,避免重複動作 digitalWrite(IN1, HIGH); // 風扇正轉(送風) digitalWrite(IN2, LOW); delay(300); } else if (digitalRead(KEY2)==0 && mode!=2) { mode=2; // 設定mode為2,避免重複動作 digitalWrite(IN1, LOW); // 風扇停止 digitalWrite(IN2, LOW); delay(300); } 實作 7/8 17
  • 18. shapethefuture 電子工程系 應 用 電 子 組 電 腦 遊 戲 設 計 組 else if (digitalRead(KEY3)==0 && mode!=3) { mode=3; // 設定mode為3,避免重複動作 digitalWrite(IN1, LOW); // 風扇反轉(吸風) digitalWrite(IN2, HIGH); delay(300); } } 實作 8/8 18