熊おふし五郎が行く

主にマイコンボードを動かした記録を書いています

Micro:bit、Micropython、ジョイスティックでLDEディスプレイのカーソルを移動する

ジョイスティック

ジョイスティックは、操作レバーの傾きで方向を入力する入力機器です。操作レバーの傾きは、可変抵抗で角度を検出します。また、操作レバーはスイッチになっている場合もあります。

f:id:bear_9973:20201111203310p:plain:w300
ジョイスティックの仕組み

ジョイスティックモジュール

ここでは、KEYESTUDIO製BBC Micro: bitのスターターキットにあるジョイスティックモジュールを使用します。

f:id:bear_9973:20201111203416j:plain:w200
ジョイスティックモジュール

他メーカーのジョイスティックモジュールを購入するときは、 周辺回路にご留意してください。

インターフェース

操作レバーの傾きで方向は、本モジュールからMicro: bitへのアナログ信号で入力します。また、ボタンはデジタル信号で入力します。

MicropythonとMicro:bit

サンプルソフトを以下に説明します。

フロー

サンプルプログラムのフローを以下に示します。

  1. レバーの傾きを入力
  2. レバーの押した状況を入力
  3. レバーの傾きの角度をLEDディスプレイの座標に変換
  4. もしレバーが押されているとき、LEDディスプレイに「YES」を表示
  5. そうでないとき、LEDディスプレイの座標にカーソルを表示

接続

接続表と接続図(写真)を示します。

Micro:bit モジュール
P0 X
P1 Y
P2 B
3V +
GND -

f:id:bear_9973:20201111203705p:plain:w400
構成図

コード

from microbit import *

# Micro:bitを初期化
display.clear()  # LCEディスプレイを初期化.
pin2.set_pull(pin2.NO_PULL)  # ピンの状態

while True:
    x_data = pin0.read_analog()
    y_data = pin1.read_analog()
    z_data = pin2.read_digital()

    led_x = x_data // 200
    led_y = y_data // 200

    if led_x >= 5:
        led_x = 4

    if led_y >= 5:
        led_y = 4

    print('x:%d y:%d z:%d' % (led_x, led_y, z_data))
    display.clear()
    if z_data:
        display.show(Image.YES)
    else:
        display.set_pixel(led_x, led_y, 9)

    sleep(500)

結果

レバーを傾けた方向にあわせて、LEDディスプレイのカーソルが移動します。また、レバーを押したとき、YES(チェックマーク)が表示します。

f:id:bear_9973:20201111203909j:plain:w300
動作状況

他メーカーのジョイスティックモジュールを購入するときは、 周辺回路にご留意してください。