自由に工作中

マイコンについて学習しています

Micro Python の書き方(ボタン割り込み)

Rasberry Pi Picoでの割り込み操作について記載しました。

IRQ(Interrupt Request)を用いて、ボタンを押したときに関数を呼ぶようにしています。

 

機能

 ボタンを押したときだけLEDが光る。

 

接続

 ・PicoのGPIO21 --- LED(アノード)---LED(カソード)---680Ω---GND

 ・PicoのGPIO8 --- ボタン---GND

 

f:id:goma483549:20210918102014j:plain

 

ソースコード

from machine import Pin
import time

# ピンの入出力設定
BUTTON_PIN = 8
button = Pin(BUTTON_PIN, Pin.IN, Pin.PULL_UP)

LED_PIN = 21
led = Pin(LED_PIN, Pin.OUT)

# 関数定義
def callback(p):
    led.value(1)
    time.sleep(1)

def ledoff():
    led.value(0)
    time.sleep(1)

# IRQの設定
button.irq(trigger=Pin.IRQ_FALLING, handler=callback)

while True:
    ledoff()

 

解説

ボタンを押した時のGPIO8の立下りをトリガーにしたいので、

GPIO8をプルアップして3.3Vに釣り上げて待機させます。

BUTTON_PIN = 8

button = Pin(BUTTON_PIN, Pin.IN, Pin.PULL_UP)

 

トリガーに掛かった時にcallback関数を読むようにしています。

ちなみに、callbackという名前でなくても、ledonなど別名でも動きました。

button.irq(trigger=Pin.IRQ_FALLING, handler=callback)

 

callback()はピン情報を引数として必ず持つため、pという引数を渡しています。

 

triggerのタイプはいくつかあり

 Pin.IRQ_FALLING
 Pin.IRQ_RISING
 Pin.IRQ_LOW_LEVEL
 Pin.IRQ_HIGH_LEVEL

があるようです。

 

以下の公式ドキュメントも参考になると思います。

割り込みができれば、マイコンの操作の幅が広がりそうですね。

 

micropython-docs-ja.readthedocs.io