Download presentation
Presentation is loading. Please wait.
Published byKellie Watkins Modified 6年之前
2
第十八章 鍵盤與電容式觸控介面應用實作 讀取鍵盤輸入 按鍵偵測與掃描原理 認識Arduino的String(字串)程式庫
結合鍵盤輸入與LCD的密碼輸入介面 電容觸控與RC電路的原理 使用4路觸控開關模組製作LED調光器
3
讀取鍵盤輸入 薄膜按鍵模組(hex keypad),有4×4或3×4,它的內部電路由16個按鍵交織而成。
4×4按鍵模組可以接在Arduino的任意8個接腳 參閱 18-3
4
4×4薄膜鍵盤的Arduino按鍵偵測程式 單元將示範使用Keypad程式庫,把偵測到的按鍵字元顯示在序列埠監控視窗。 參閱 18-4
#include <Keypad.h> // 引用Keypad程式庫 #define KEY_ROWS 4 // 按鍵模組的列數 #define KEY_COLS 4 // 按鍵模組的行數 // 依照行、列排列的按鍵字元(二維陣列) char keymap[KEY_ROWS][KEY_COLS] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; byte colPins[KEY_COLS] = {5, 4, 3, 2}; // 按鍵模組,行1~4接腳。 byte rowPins[KEY_ROWS] = {9, 8, 7, 6}; // 按鍵模組,列1~4接腳。 Keypad myKeypad = Keypad(makeKeymap(keymap), rowPins, colPins, KEY_ROWS, KEY_COLS); 參閱 18-4
5
按鍵偵測與掃描原理(一) 假設開關的「行1」~「行3」輸入端全都輸入高電位,無論開關是否被按下,Arduino將接收到高電位(1)。
為了檢測到其中按鍵被按下,程式必須依序將「行1」~「行3」腳位設定成低電位。 參閱 18-6
6
按鍵偵測與掃描原理(二) 輪到「行3」腳輸入低電位,由於「開關C」未被按下,因此微控器的輸入腳接收到高電位(1)。
實際的程式需要運用雙重迴圈,才能分批掃描每一列: 參閱 18-7
7
減少佔用數位接腳 連接一個4×4薄膜鍵盤的接腳若不夠用,大致有下列幾個解決方法,請參閱筆者網站的這一篇文章: 使用鍵盤解碼IC,像74C922,能將8個鍵盤輸入腳,減少成5個接腳。 擴充數位腳,例如,利用PCF8574這個IC,透過I2C匯流排擴充數位介面。 使用並列轉串列的IC(位移暫存器),如74HC165。 使用電阻分壓電路 參閱 18-9
8
認識Arduino的String(字串)程式庫
除了用陣列儲存字串,還可以用Arduino IDE內建的String程式庫。 字元陣列的字串長度,在宣告時就固定了,String的資料長度則是可變動的。 參閱 18-10
9
String的方法和屬性 String不僅是一種資料類型,也提供操作字串的功能(method,方法)以及字串的屬性。 參閱 18-12
length() 傳回字串的字元數(不含結尾的null) equals() 比較兩個字串內容是否相同(大小寫有別) charAt() 取出字串中的特定字元 substring() 取出部分字串內容 toCharArray() 將字串複製到字元陣列中 toLowerCase() 將字串內容全部轉換成小寫 參閱 18-12
10
結合鍵盤輸入與LCD的密碼輸入介面(一)
本文將結合4x4薄膜按鍵以及文字型LCD顯示器,製作一個密碼輸入介面。 I2C介面的轉接板和1602 LCD模組的外觀,I2C介面的顯示器轉接板,都是依照LCD模組的接腳設計,兩者可直接焊在一起。 參閱 18-13
11
結合鍵盤輸入與LCD的密碼輸入介面(二)
連接薄膜鍵盤和LCD序列顯示模組,即便是採用74LS164組裝的LCD模組的資料和時脈線,也能接在類比輸入埠。 清除顯示字元的方法,是用「空白字元」蓋掉原本的字元。 void clearRow(byte n) { byte last = 16 - n; // 計算需要清除的字數 lcd.setCursor(n, 1); for (byte i = 0; i < last; i++) { lcd.print(" "); } lcd.setCursor(n, 1); // 游標移回第2行的清除起始位置 參閱 18-14
12
電容式觸控開關實驗(一) 觸控開關是經由碰觸產生開或關訊號的裝置。本實驗將使用鋁箔紙和電阻DIY一個電容式觸控開關控制LED。
實驗電路的1MΩ電阻的一端都連接到同一個數位腳,電阻的另一端連接到不同的數位腳。 參閱 18-18
13
電容式觸控開關實驗(二) 使用麵包板組裝電路的示範如右,用迴紋針固定電阻的一端和鋁箔紙: 參閱 18-19
14
電容觸控與RC電路的原理(一) 本實驗程式將在電阻的一端(數位第4腳)發送脈衝訊號
當手指靠近感測端時,手指和感測端的導體(鋁箔)之間會形成電容: 電容的基本結構如右圖,用兩片導體、中間以絕緣介質(如:空氣、雲母、陶瓷…)隔離。當兩端導體通電時,導體就會聚集正、負電荷,形成「電的容器」。 參閱 18-20
15
電容觸控與RC電路的原理(二) 右圖是用電阻(R)和電容(C)組成的基本RC電路。
電阻R與電容值C的乘積稱為時間常數(time constant),寫成希臘字母τ(唸作“tau”)。 參閱 18-21 向電阻的一端輸入脈衝訊號,當手指接觸電阻另一端時,輸出脈衝的高、低電位時間將被「延後」。
16
觸控開關實驗程式 採用CaptivativeSensor程式庫編寫觸控開關程式。
開啟Arduino IDE,選擇「檔案→範例→CapacitiveSensor→CapacitiveSensorScketch」,開啟程式庫提供的範例程式。 參閱 18-22
17
電容式觸控開關模組 4路觸控模組相當於右下角的4組開關,所以程式不需要引用特別的程式庫。
使用觸控IC的好處是穩定、不易受外界環境影響(如:汗水、油污)和雜訊干擾,而且程式也簡單許多。 參閱 18-25
18
使用4路觸控開關模組製作LED調光器 本單元實驗將使用4路觸控開關模組的其中3個開關,當作LED燈的開關、調亮和調暗控制介面。
本單元程式先製作「碰一下開、再碰一下關」的開關效果。每碰觸一次開關,開關模組就會輸出一個脈衝(方波): 參閱 18-26
Similar presentations