変数を使う
Maker Pi RP2040には13個のブルーLEDが搭載されています。今度は2つのLEDを点滅させてみましょう。
2ledBlink.py
#CircuitPython 2LEDを光らせるサンプルプログラム
import time
import board
import digitalio
# 2LED 初期化
led0 = digitalio.DigitalInOut(board.GP0)
led1 = digitalio.DigitalInOut(board.GP1)
# For Maker Pi RP2040. It has LED's on board.
# GP0-GP7 and GP16,GP17,GP26,GP27,GP28
# You can choose.
led0.direction = digitalio.Direction.OUTPUT
led1.direction = digitalio.Direction.OUTPUT
while True:
led0.value = 1
time.sleep(0.3) # wait 0.3 seconds
led0.value = 0
time.sleep(0.1)
led0.value = 1
time.sleep(0.3) # wait 0.3 seconds
led0.value = 0
time.sleep(0.1)
led0.value = 1
led1.value = 1
time.sleep(0.5) # wait 0.5 seconds
led0.value = 0
led1.value = 0
time.sleep(0.2)
これをCIRCUITPYにcode.pyという名前で書き込んでください。2つのLEDが光ります。今度はled0をGP0にled1をGP1に割り当てます。これが変数です。プログラミングを簡単にする仕組みです。光るメトロノームにしています。ここもいろいろアレンジして好きな音楽に合わせて光らせてみましょう。無機質なイルミネーションから超イケてるライトイルミネーションのプロトタイプになりましたね。
10個のLEDを操作する
上のプログラムはまだ2個だからいいですけど、10個のLEDを扱うときにはどうすればいいのでしょうか?
# 10LED setup.
led0 = digitalio.DigitalInOut(board.GP0)
led1 = digitalio.DigitalInOut(board.GP1)
led2 = digitalio.DigitalInOut(board.GP3)
..................
これを10行書くのは非常に手間がかかります。そしてこのMaker Pi RP2040のオンボードLEDはGP7のあとはGP17にいきなり飛んでしまいます。エラーが生じる原因にもなりますね。
リストというややこしくてしかし便利なもの
REPLモードにしてみましょう。animalsという変数にリストを作ります。[](ブラケット)でかこみ、それぞれをカンマで区切ります。
animalsと入力してエンターキーを押します。そうするとリストが表示されます。
一番最初のdogにアクセスするにはどうすればよいでしょうか?animals[0]と入力しエンターキーを押してください。そうするとdogが表示されます。Pythonの世界では最初の要素は0番目なのです。
あとはanimals[1]でcatにアクセスできます。以下は略。
>>>animals = ['dog', 'cat', 'bird', 'monkey']
>>>animals
['dog', 'cat', 'bird', 'monkey']
>>>animals[0]
'dog'
>>>animals[1]
'cat'
>>>animals[2]
'bird'
>>>animals[3]
'monkey'
>>>len(animals)
4
len()でリストの中の要素の数を確認する
animalsのリストには要素がいくつありますか?4つです。このような簡単なプログラムではまだ目で確認できるからいいですね。しかしこれがもしリストの中身が10以上になってくると数えるのも面倒ですし、もしかしたら間違えるかもしれません。
そんなときにはlen()を使いましょう。len(animals)で4とカウントしてくれます。
10 ledBlink.py
#CircuitPythonで10個のLEDを操作する
import time
import board
import digitalio
# LEDsをイニシャライズ
# Maker Pi RP2040上のLEDはこちら
LED_PINS = [board.GP0,
board.GP1,
board.GP2,
board.GP3,
board.GP4,
board.GP5,
board.GP6,
board.GP7,
board.GP16,
board.GP17]
LEDS = []
for pin in LED_PINS:
# pinをDigitalInOutモードにし、アウトプット方向に設定する
digout = digitalio.DigitalInOut(pin)
digout.direction = digitalio.Direction.OUTPUT
#LEDSリストの中に加える
LEDS.append(digout)
while True:
for i in range(len(LEDS)):
LEDS[i].value = True
time.sleep(0.1)
for i in range(len(LEDS)):
LEDS[i].value = False
time.sleep(0.03)
LED_PINSというリストの中に各GPピンを割り当てます。LEDSというリストの中にDIgitaiInOutで使う宣言をして、さらにアウトプットモード指定するのです。LEDS.appendでLEDSという空のリストの中に要素を追加していきます。LED_PINSのリストの中を見てください。7番から16番に数が飛んでいますね。これをおぼえておくのが面倒なので、最終的にはLEDS[0,1,2,3,4,5,6,7,8,9]という簡単な数値に置き換えて間違いのおこらない変数に格納していきます。
for文は回数指定
for文は特定の回数なにか処理をさせるときに使います。REPLモードで試してみます。(‘hello’)までタイプしたらエンターキー、back spaceキーを押したらまたエンターキーを押すとhelloが5回プリントされます。
>>>for i in range(5):
... print('hello')
...
hello
hello
hello
hello
hello
>>>
なので上記プログラムのfor i in range(len(LEDS)):は改行してインデントした処理を10回繰り返します。一つづつ点灯して、一つづつ消灯していきます。前回はled.value = 1で点灯でした。今回はLED[0].value = Trueで点灯させています。どちらでも構いません。10個もLEDが使えると楽しいですね。音楽の音量メーターにも使えそうです。ドレミファソラシドに対応させて、キーボードのどの鍵盤を弾けばいいのか教えてくれる装置も作れそうですね。