Arduino 4×4薄膜鍵盤模組實驗(二):減少佔用Arduino的數位接腳

連接一個4×4薄膜鍵盤要佔用8個數位腳,若數位腳不夠用,大致有下列幾個解決方法:

  • 使用專屬IC連接鍵盤,像74C922,是一個16鍵的解碼IC,能將8個鍵盤輸入腳,降低成5個接腳(4個資料輸出腳,1個「有新的資料」訊號腳)。
  • 擴充數位腳,例如,利用PCF8574這個IC,透過I2C匯流排擴充數位介面,從這裡可下載Arduino的PCF8574程式庫。“I2C port Expander and 74C922 Keypad Decoders”這篇文章介紹了使用PCF8574擴充Arduino的數位腳,並採用74C922解碼鍵盤訊號的例子。
  • 使用並列轉串列的IC(位移暫存器),像74HC165,這一篇文章包含使用74HC165連接10個按鈕輸入的例子。

把4×4按鍵轉換成類比訊號輸出

還有一種簡單、經濟的解決方法:使用數個電阻構成分壓電路,不同的按鍵將產生不同的電壓輸出,因此只須佔用一個Arduino的類比輸入腳。

4x4按鍵轉換成類比訊號輸出的電路

此電路的運作原理如下:若按下按鍵“1”,電阻1KΩ將和10KΩ構成分壓電路:

按下按鍵1的結果

若按下按鍵“5”,則是1KΩ+1KΩ+220Ω,共2220Ω和10KΩ形成分壓電路:

按下按鍵5的結果

按鍵的分壓電阻值可以自行配置,不一定要採用上圖的1KΩ和220Ω電阻值,底下是另一個功能相同的電路(取自Microchip論壇的這一篇討論文),電阻值配置不同,按鍵產生的電壓值也和上圖不同,你要自行測試每個按鍵被Arduino的analogRead()指令讀取到的數值。這個電路的輸出端連接一個由電阻和電容構成的簡易消除彈跳(濾波)電路:

simple 1 pin 4x4 matrix keypad

實驗材料與麵包板接線示範

本單元的實驗材料如下:

  • Arduino Uno控制板,一片
  • 4×4薄膜鍵盤(或者類似款式的鍵盤)×1
  • 電阻:220Ω(紅紅棕)×3、1KΩ(棕黑紅)×4、10KΩ(棕黑橙)×1

麵包板接線示範:

4x4按鍵類比訊號輸出的麵包板接線示範

輸出類比訊號的按鍵程式

本單元程式採用ExperimentalTechnik網站的Matrix Keypad文章提供的程式庫,這個程式庫必須搭配上面的電阻配置。請先下載AnalogMatrixKeypad程式庫,將它解壓縮到Arduino的libraries資料夾,再上傳這個程式碼:

#include <AnalogMatrixKeypad.h>

// 初始化鍵盤物件,按鍵電路接在A0腳。
AnalogMatrixKeypad keypad(A0);

void setup(){
  Serial.begin(9600);
}

void loop(){
  char key = keypad.readKey();   // 讀取按鍵輸入
  
  if (key != KEY_NOT_PRESSED) {  // 如果不是「沒有按鍵被按下」… 
     Serial.println(key);          // 顯示按鍵的字元
  }
}

編譯並上傳程式碼之後,開啟序列埠監控視窗,再按下薄膜鍵盤的任何按鍵,將能在序列埠監控視窗顯示該按鍵的字元。

未完,待續…

延伸閱讀

Posts created 468

8 thoughts on “Arduino 4×4薄膜鍵盤模組實驗(二):減少佔用Arduino的數位接腳

  1. 赵老师,我是湖北省钟祥市的一名高中信息技术老师,现在指导学生开展arduino活动,由于之前没有接触过单片机知识,自学过程中,偶然找到您的帖子,感觉耳目一新,深入浅出,生动形象,很好理解,感觉您的书确是一本难得的学习教材。
    可是,由于大陆书店没有您的作品销售,不能抚本夜读,甚是遗憾!能否直接帮忙邮寄一本?我可以通过微信或者支付宝直接付款给您。
    若如可行,三生有幸!

    1. 谢谢老师,我自己都觉得不好意思啦~

      本书有简体中文版,在当当或亚马逊等书店都买得到:
      《完美图解Arduino互动设计入门》
      作者: 赵英杰
      出版社: 科学出版社

      敬祝
      教安!

      thanks,
      jeffrey

  2. 想請問一下趙老師
    我執行的結果鍵盤讀取到的值會往左偏一個
    按左上的1變成2 按A無反應
    4行都是
    可能是哪邊有問題呢?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top