ジョイスティック

アナログジョイスティックをご用意ください。

スイッチサイエンス

ジョイスティックをベゼボードに接続します。

デジタルスイッチつきのジョイスティックもありますが、ここでは使いません。

サンプルプログラムを実行してみましょう。画面にXとYの値が表示されますが、ジョイスティックを横あるいは縦に傾けたとき、これらの値が変化すれば成功です。

python3 sample_joystick1.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Sample Code : アナログ入力のサンプル
# ジョイスティックを接続しておいてください。

# ライブラリの読み込み
import RPi.GPIO as GPIO
from time import sleep

# MCP3204からSPI通信で12ビットのデジタル値を取得。
def readadc(adcnum, clockpin, mosipin, misopin, cspin):
    if adcnum > 7 or adcnum < 0:
        return -1
    GPIO.output(cspin, GPIO.HIGH)
    GPIO.output(clockpin, GPIO.LOW)
    GPIO.output(cspin, GPIO.LOW)

    commandout = adcnum
    commandout |= 0x18  # スタートビット+シングルエンドビット
    commandout <<= 3    # LSBから8ビット目を送信するようにする
    for i in range(5):
        # LSBから数えて8ビット目から4ビット目までを送信
        if commandout &amp; 0x80:
            GPIO.output(mosipin, GPIO.HIGH)
        else:
            GPIO.output(mosipin, GPIO.LOW)
        commandout <<= 1
        GPIO.output(clockpin, GPIO.HIGH)
        GPIO.output(clockpin, GPIO.LOW)
    adcout = 0
    # 13ビット読む(ヌルビット+12ビットデータ)
    for i in range(13):
        GPIO.output(clockpin, GPIO.HIGH)
        GPIO.output(clockpin, GPIO.LOW)
        adcout <<= 1
        if i>0 and GPIO.input(misopin)==GPIO.HIGH:
            adcout |= 0x1
    GPIO.output(cspin, GPIO.HIGH)
    return adcout

# 初期設定
GPIO.setmode(GPIO.BCM)

# 変数
SPICLK = 11
SPIMOSI = 10
SPIMISO = 9
SPICS = 8

# SPI通信用の入出力を定義
GPIO.setup(SPICLK, GPIO.OUT)
GPIO.setup(SPIMOSI, GPIO.OUT)
GPIO.setup(SPIMISO, GPIO.IN)
GPIO.setup(SPICS, GPIO.OUT)

# 関数
def main():
  try:
    print ("開始します")
    while True:
      axisX = readadc(1, SPICLK, SPIMOSI, SPIMISO, SPICS)
      print("X= "+str(axisX), end="\t")
      axisY = readadc(2, SPICLK, SPIMOSI, SPIMISO, SPICS)
      print("Y= "+str(axisY))
      sleep(0.5)

  except KeyboardInterrupt:
    print ("終了しました")
    GPIO.cleanup()                     # ポートをクリア

# 直接実行された場合の処理
if __name__ == "__main__":
    main()

ジョイスティックの傾きに応じてベゼリーの体を動かすようにするだけでも、結構面白いものができます。