MicroPythonのメインループ内でいろんなアイコンを表示できるようにしてみよう

MicroPythonでメインループのコードを書いてみようで作成しましたメインループのコードで、BボタンやABボタン同時押しの入力(イベント)を追加してみましょう。


作成するコードは下記のようにします。

Aボタンを押した時は



左矢印を表示し、Bボタンを押した時は



右矢印を表示します。


ABボタン同時押しは、



矢印の合体にして、何も押していない時は



×印にしてみます。




特に考えずに前回のコードに上から順にコードを追加してみますと、


from microbit import *

while True:
	if button_a.is_pressed():
		display.show(Image('00900:'
				'09000:'
				'99999:'
				'09000:'
				'00900'))
	elif button_b.is_pressed():
		display.show(Image('00900:'
				'00090:'
				'99999:'
				'00090:'
				'00900'))
	elif button_a.is_pressed() and button_b.is_pressed():
		display.show(Image('00900:'
				'09090:'
				'99999:'
				'09090:'
				'00900'))
	else:
		display.show(Image.NO)

になるかと思います。


このコードをフラッシングして、動作を確認してみますが、AボタンとBボタンは反応しますが、ABボタン同時押しは反応しません。

※ABボタン同時押しの条件式は

elif button_a.is_pressed() and button_b.is_pressed():

の箇所


ABボタン同時押しが反応しない理由は、ABボタン同時押しの条件式の上で、AボタンとBボタンの条件式があり、ABボタン同時押しの場合、AボタンとBボタンのどちらかの条件式に該当するからになります。


この問題を解決するために下記のようにコードを書き換えてみます。

from microbit import *

while True:
	if button_a.is_pressed() and button_b.is_pressed():
		display.show(Image('00900:'
				'09090:'
				'99999:'
				'09090:'
				'00900'))
	elif button_a.is_pressed():
		display.show(Image('00900:'
				'09000:'
				'99999:'
				'09000:'
				'00900'))
	elif button_b.is_pressed():
		display.show(Image('00900:'
				'00090:'
				'99999:'
				'00090:'
				'00900'))
	else:
		display.show(Image.NO)

※AB同時押しの条件式を一番上に持ってきた


これでAB同時押しも反応するようになりました。

同じカテゴリーの記事
マインクラフト用ビジュアルエディタを開発しています。
詳しくはinunosinsi/mcws_blockly - githubをご覧ください。