2019年6月27日 星期四

Raspberry Pi筆記:GPIO 按鈕

基本說明:

RPi.GPIO基本input操作,透過外部線路短路來改變GPIO的狀態。

接線:

#1GND
#2GPIO#2

Python程式:

import RPi.GPIO as GPIO
import time
PIN = 2

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.cleanup()

GPIO.setup(PIN, GPIO.IN)

def callback(PIN):
  print("clicked")

GPIO.add_event_detect(PIN, GPIO.RISING, bouncetime=200)
GPIO.add_event_callback(PIN, callback)

while True:
  time.sleep(10)

討論:

1. 這裡的程式使用了RPi.GPIO的事件偵測函數event_detect,呼叫以後會自動產生另外一組thread在偵測GPIO狀態,所以只需要控制主程式沒有停止就可以繼續執行。
2. 範例程式中的add_event_detect主要有2個參數,第一個為針腳位置,第二個為GPIO偵測到的狀態,可以為RISING / FALLING / BOTH,依需求設定。其餘可有可無的參數,包括bouncetime用來間隔事件發生的頻率,callback用來指定事件發生時會呼叫的函數。
3. 比較複雜的按鈕,如4x4或3x4矩陣鍵盤,原理是每條row與每條column的位置發生短路,就代表該鍵被按下。因此需要把row或column設定GPIO.OUT,column或row設定為GPIO.IN,來偵測短路位置。

參考:

1. https://sourceforge.net/p/raspberry-gpio-python/wiki/Inputs/

沒有留言:

張貼留言