×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
課題:LEDをスイッチでON、OFFでONOFF状態を保持して切り替え
配線 GND--LED--500オーム--11ピン
GND--スイッチ--12ピン (通常は1k程度の抵抗を念の為にいれるが
ラズパイのGPIOは、内部でプルアップとプルダウン抵抗を持っている)
仕様:押しせば点灯と消灯を繰り返す
エッジ検出:GPIO.wait_for_edge
信号がHIGHからLOWまたはその逆に変化するまで待ち状態になる
前回のGPIO.add_event_detectから今回のGPIO.add_event_detect
までの間で発生したエッジの状態を示す命令 つまり発生して居たかの判断で
発生でイベントが作成されるのではない
GPIO.add_event_detect([チャンネル], [検出したいエッジ])
例
GPIO.add_event_detect(BtnPin, GPIO.FALLING)
3.コールバック関数の実行
他の処理を指定できる 別スレッドで実行関数名をdef swLed
GPIO.add_event_detect(BtnPin, GPIO.FALLING,callback=swLed)
4.チャタリング防止
#ライブラリの読み出し
import PRi.GPIO as GPIO
import time
#GPIOのピンでのアサイン
LedPin = 11
BtnPin = 12
Led_status = 0
#初期設定 11を出力 12を入力
def setup():
GPIO.setmode(GPIO.BOARD)
GPIO.setup(LedPin, GPIO.OUT)
GPIO.setup(BtnPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.output(LedPin, GOIP.HIGH) #点灯
プルアッププルダウン回路は前ブログ参照
def swLed(ev=None):
global Led_status
GPIO.output(LedPin, Led_status)
if Led_status == GOIP.HIGH:
Led_status == GOIP.LOW
else:
Led_status == GOIP.HIGH
#処理
def loop():
GPIO.add_event_detect(BtnPin,GPIO.FALLING,callback=swLed,bouncetime=5)
while True:
pass
def destroy():
GPIO.output(Ledpin,GPIO.LOW) #消す
GPIO.remobe_event_detect(BtnPin)
GPIO.cleanup()
#実際のスタートは
if __name__ == '__main__':
setup()
try:
loop()
excepy KeyboardInterrupt: #CTRL+C
destroy()
これでOK
配線 GND--LED--500オーム--11ピン
GND--スイッチ--12ピン (通常は1k程度の抵抗を念の為にいれるが
ラズパイのGPIOは、内部でプルアップとプルダウン抵抗を持っている)
仕様:押しせば点灯と消灯を繰り返す
エッジ検出:GPIO.wait_for_edge
信号がHIGHからLOWまたはその逆に変化するまで待ち状態になる
1.GPIO.wait_for_edge([チャンネル], [検出したいエッジ])
GPIO.RISING (立ち上がりエッジ)
GPIO.FALLING (立ち下がりエッジ)
GPIO.BOTH (立ち上がりまたは立ち下がりエッジ)
例 今回は押すとLOWだから2.状態の確認:add_event_detect
GPIO.wait_for_edge(BtnPin, GPIO.FALLING) ’この指定は不要
前回のGPIO.add_event_detectから今回のGPIO.add_event_detect
までの間で発生したエッジの状態を示す命令 つまり発生して居たかの判断で
発生でイベントが作成されるのではない
GPIO.add_event_detect([チャンネル], [検出したいエッジ])
例
GPIO.add_event_detect(BtnPin, GPIO.FALLING)
3.コールバック関数の実行
他の処理を指定できる 別スレッドで実行関数名をdef swLed
GPIO.add_event_detect(BtnPin, GPIO.FALLING,callback=swLed)
4.チャタリング防止
bouncetime=[バウンス時間(ミリ秒)])
5.イベントの解除
remove_event_detect(BtnPin)
6.global変数への関数内での代入
global Led_status #globalの指定が必要
Led_status == 0
#ライブラリの読み出し
import PRi.GPIO as GPIO
import time
#GPIOのピンでのアサイン
LedPin = 11
BtnPin = 12
Led_status = 0
#初期設定 11を出力 12を入力
def setup():
GPIO.setmode(GPIO.BOARD)
GPIO.setup(LedPin, GPIO.OUT)
GPIO.setup(BtnPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.output(LedPin, GOIP.HIGH) #点灯
プルアッププルダウン回路は前ブログ参照
def swLed(ev=None):
global Led_status
GPIO.output(LedPin, Led_status)
if Led_status == GOIP.HIGH:
Led_status == GOIP.LOW
else:
Led_status == GOIP.HIGH
#処理
def loop():
GPIO.add_event_detect(BtnPin,GPIO.FALLING,callback=swLed,bouncetime=5)
while True:
pass
def destroy():
GPIO.output(Ledpin,GPIO.LOW) #消す
GPIO.remobe_event_detect(BtnPin)
GPIO.cleanup()
#実際のスタートは
if __name__ == '__main__':
setup()
try:
loop()
excepy KeyboardInterrupt: #CTRL+C
destroy()
これでOK
PR