星期一, 2月 17, 2014

Raspberry Pi 筆記(九):使用Keypad

[2014/02/15]
有一段時間非常熱衷使用Arduino做一些有趣的實驗,其中一個就是Keypad,從拆解看Keypad線路到完成使用按鍵演奏音樂,覺得非常充實。今天使用Raspberry Pi也來試試看能否成功安裝Keypad 輸出數字。


[材料]

• 麵包板 x 1
• Raspberry Pi 主板 x 1
• 3x4 Keypad x 1
• 連接線 x 7條

[線路連接與電路圖]

• Raspberry Pi Pin7(GPIO4)接到 Keypad 左邊第一隻接腳
• Raspberry Pi Pin11(GPIO17)接到 Keypad 左邊第二隻接腳
...請參考下表,於此類推:

位置 KeyPad接腳 Raspberry Pi GPIO接腳
COL0
5
23
COL1
6
24
COL2
7
25
ROW0
1
4
ROW1
2
17
ROW2
3
18
ROW3
4
22


實驗過程中,數字789那一排一直無法出現在Console上,覺得很奇怪,查一下那一排ROW2是接到Pin13,也就是GPIO21,先將 Pin13 改接到 Pin7 (GPIO4),顯示就就沒問題了。後來在網路上查詢時發現新版Raspberry Pi 新推出的版本已經將GPIO21改為GPIO27。於是將程式的Pin7 的GPIO4改為Pin 13的GPIO27,鍵盤按鍵789也可以顯示在Console上了。

[程式]

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

rows = [4, 17, 18, 22]
cols = [23, 24, 25]
keys = [
    ['1', '2', '3'],
    ['4', '5', '6'],
    ['7', '8', '9'],
    ['*', '0', '#']]

for row_pin in rows:
    GPIO.setup(row_pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

for col_pin in cols:
    GPIO.setup(col_pin, GPIO.OUT)

def get_key():
    key = 0
    for col_num, col_pin in enumerate(cols):
        GPIO.output(col_pin, 1)
        for row_num, row_pin in enumerate(rows):
            if GPIO.input(row_pin):
               key = keys[row_num][col_num]
        GPIO.output(col_pin, 0)
     return key

while True:
    key = get_key()
    if key :
        print(key)
    time.sleep(0.2)

[參考資料]

Raspberry Pi Cookbook
Share:

0 意見:

張貼留言