Maker Pi RP2040にはGP20とGP21にプログラムで使うことができるボタンを割り当てています。次のサンプルプログラムをうごかしてみましょう。
#BUTTONを使ったCircuitPythonサンプルプログラム
import time
import board
import digitalio
# Initialize LEDs
# LEDs placement on Maker Pi RP2040
LED_PINS = [board.GP0,
board.GP1,
board.GP2,
board.GP3,
board.GP4,
board.GP5,
board.GP6,
board.GP7,
board.GP16,
board.GP17,
board.GP26,
board.GP27,
board.GP28]
LEDS = []
for pin in LED_PINS:
# Set pins as digital output
digout = digitalio.DigitalInOut(pin)
digout.direction = digitalio.Direction.OUTPUT
LEDS.append(digout)
# BUTTON(GP20,GP21)をイニシャライズする
btn1 = digitalio.DigitalInOut(board.GP20)
btn2 = digitalio.DigitalInOut(board.GP21)
btn1.direction = digitalio.Direction.INPUT
btn2.direction = digitalio.Direction.INPUT
btn1.pull = digitalio.Pull.UP
btn2.pull = digitalio.Pull.UP
while True:
# button 1 (GP20)をチェック中
if not btn1.value: # button 1 が押されたら
# all LEDsを点灯へ
for i in range(len(LEDS)):
LEDS[i].value = True
time.sleep(0.1)
# button 2 (GP21)をチェック中
elif not btn2.value: # button 2が押されたら
# all LEDsを消灯
for i in range(len(LEDS)):
LEDS[i].value = False
time.sleep(0.15)
BUTTON(GP20,GP21)をイニシャライズする
変数btn1にGP20を、btn2にGP21をDigitalInOutモードにして格納します。そしてINPUTモードに指定。そしてPull.UPモードにすると入力モードになりスイッチとして使えるようになります。
REPLモードでみてみましょう。
>>> import board
>>> import digitalio
>>> btn1 = digitalio.DigitalInOut(board.GP20)
>>> btn1.direction = digitalio.Direction.INPUT
>>> btn1.pull = digitalio.Pull.UP
>>> btn1.value
True
>>> btn1.value
False
>>>
TrueとFalse
btn1.valueというコマンドはbtn1の値を調べます。何も押さずにbtn1.valueとするとTrueが出力されます。今度は20番スイッチを押しながらbtn1.valueを押すとFalseが返ってきます。Trueとはなんでしょう?真実?ここでは正常状態であることを示すTrueであると考えましょう。ボタンが押された場合異常状態であるためFalseという値を示すのです。
if文で条件分岐させる
REPLモードにしてみましょう
>>>a = 5
>>>if a <3 :
... print('hello')
...
>>>if a < 6:
... print('hello'):
...
hello
>>>if a==6:
... print('hello')
...
>>>if a==5:
... print('hello')
...
hello
1つ目のifのあとはhelloが表示されません。aには5が代入されています。aは3よりも小さくないので条件に当てはまらないのです。次のif文だと6よりは小さいので今度はhelloと印字されます。等しいときにだけのときには==を使います。a=6というコマンドは代入されてしまいpythonが混乱してしまうので注意してください。あとは<=や>=も使います。以下のとき、以上のときですね。
>>>a = 2
>>>if not a==2:
... print('x')
...
>>>if not a==3:
... print('x')
...
x
if notはちがったら
もしaが2ではなかったらxをプリントしてください。という命令です。もちろんなにもプリントされません。つぎaは3ではないのでxがプリントされます。if~notはTrueでなければ以下の処理を実行します。