Help us understand the problem. What is going on with this article?

M5Stack MicroPython API調査記録 ボタン編

More than 1 year has passed since last update.

M5Cloud README.mdなどからのM5Stack MicroPython 固有のAPI調査記録 ボタン編(2018年3月2日現在)

ボタン

M5Stackには3つのボタンがついている。

ボタンを使うには m5stack モジュールにある以下の Button オブジェクトをインポートします。

ボタン Buttonオブジェクト
A (左) BtnA buttonA
B (中央) BtnB buttonB
C (右) BtnC buttonC

※ ファームウェア 0.3.4 からボタンオブジェクトの名前が変更

ESP32とボタンの配線

ボタンの一端はそれぞれ以下に配線されている(もう一端はGND):

ESP32ピン ボタン
GPIO39 A (左) 
GPIO38 B (中央)
GPIO37 C (右)

Buttonのメソッド

Button.press() Button.isPressed()

※ ファームウェア 0.3.4 からメソッド名が変更

ボタンが押されているかをチェックする。ボタンが押されていれば True を返す。

例:

import m5stack as m5

while True:
    if m5.buttonA.isPressed():  # ボタンAが押されているか
        m5.lcd.println('Button A is Pressed')
    time.sleep_ms(10)

Button.isReleased()

※ ファームウェア 0.3.4 から追加

ボタンが押されていないかをチェックする。ボタンが押されていなければ True を返す。

例:

import m5stack as m5

while True:
    if m5.buttonA.isReleased():  # ボタンAが押されていないか
        m5.lcd.println('Button A is Released')
    time.sleep_ms(10)

Button.pressedFor(timeout)

※ ファームウェア 0.3.4 から追加

ボタンを timeout 秒押し続けて放した場合に True を返す。

例:

import m5stack as m5

while True:
    if m5.buttonA.pressedFor(1.5):  # ボタンAが 1.5 秒以上押された
        m5.lcd.println('Button A pressed for 1.5s')
    time.sleep_ms(10)

Button.set_callback(press_cb) Button.wasPressed(callback=None)

※ ファームウェア 0.3.4 からメソッド名が変更になり、機能も一部変更

コールバック関数 callback を指定していれば、ボタンが押されたときにコールバック関数が呼び出される。コールバック関数を指定していなければ、このメソッドが呼び出される前ににボタンを押すアクションがあったのであれば True を返す。

コールバック関数はパラメータを1つ持たなければならない。コールバック時にはパラメータに押されたボタンに該当する Pin オブジェクトが渡ってくる。

コールバック関数指定の例:

import m5stack as m5

def on_wasPressed():  # コールバック関数
    m5.lcd.println('Button A was Pressed.')

m5.buttonA.wasPressed(on_wasPressed)

コールバック関数指定なしの例:

import m5stack as m5

while True:    
    if m5.buttonA.wasPressed():  # ボタンAが押されたか
        m5.lcd.println('Button A was Pressed')
    time.sleep_ms(10)

Button.wasReleased(callback=None)

※ ファームウェア 0.3.4 から追加

コールバック関数 callback を指定していれば、ボタンを押した状態から放したときにコールバック関数が呼び出される。コールバック関数を指定していなければ、このメソッドが呼び出される前に直前にボタンを放すアクションがあったのであれば True を返す。

コールバック関数指定の例:

import m5stack as m5

def on_wasReleased():  # コールバック関数
    m5.lcd.println('Button A was Released.')

m5.buttonA.wasReleased(on_wasReleased)

コールバック関数指定なしの例:

import m5stack as m5

while True:    
    if m5.buttonA.wasReleased():  # ボタンAが押されたか
        m5.lcd.println('Button A was Released')
    time.sleep_ms(10)

Button.releasedFor(timeout, callback=None)

※ ファームウェア 0.3.4 から追加

コールバック関数 callback を指定していれば、ボタンを timeout 秒押した状態から放したときにコールバック関数が呼び出される。コールバック関数を指定していなければ、このメソッドが呼び出される前にボタンを timeout 秒押した状態から放すアクションがあったのであれば True を返す。

コールバック関数指定の例:

import m5stack as m5

def on_releasedFor():  # コールバック関数
    m5.lcd.println('Button A released for 2s press hold.')

m5.buttonA.releasedFor(2, on_releasedFor)

コールバック関数指定なしの例:

import m5stack as m5

while True:
    if m5.buttonA.releasedFor(2):  # ボタンAを 2 秒以上押して放したか
        m5.lcd.println('Button A released for 2s press hold.')
    time.sleep_ms(10)
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした