こんばんは!
今回はArduinoでジョイスティックを使っていこうと思います。
概要
Arduinoを用いてジョイスティックを使って、x,y方向の値とスイッチの状態を読み取ってみる
使用するもの
・Arduinoメインボード(https://amzn.to/2vkPIUH)
・USBケーブル(https://amzn.to/2UHhntl)
・ジャンパワイヤ (https://amzn.to/39uBU8T)
・ジョイスティック(https://amzn.to/2RnFHA1)
ジョイスティックとは
ジョイスティックとは
ジョイスティック(Joystick)は、コンピュータへの入力機器のうち、レバーによる方向入力が行えるものの総称。やや大型の本体を机上に置くか吸盤などで固定し、レバー部分だけを手で握って操作するものが多い。
出典:Wikipedia
というものです。
ゲーム機などにコントローラーとしてよく使われていますね。
今回使用するジョイスティックモジュールは「HW-504」
これは
・XY方向の読み取り
・スイッチのON/OFFの読み取り
を行うことができます。
5本のピンがあり、上から
GND,5V,URx,URy,SWとなっています。
URxピンがx軸方向の値の読み取り、URyピンがy軸方向の読み取り、SWピンがスイッチのON/OFFの読み取りに使用されます。
xy方向の読み取りにはanalogReadを使用し、スイッチのON/OFFの読み取りにはdigitalReadを使用します。
x、y方向の値はanalogReadで読み取っているので0~1023までの値となっています。
左上が(0,0)であり、右下が(1023,1023)になっています。
ジョイスティックを何も動かしていない状態だとx、yともに510前後の値になります。
手順
まず以下の図のようにArduino UNOとジョイスティックを接続してください。
次にArduino IDEを起動して、以下のコードを書き込んでください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | int sw = 2; int y = A0; int x = A1; int switch_state = 0; int x_pos = 0; int y_pos = 0; void setup() { pinMode(x, INPUT); pinMode(y, INPUT); pinMode(sw, INPUT_PULLUP); Serial.begin(9600); } void loop() { switch_state = digitalRead(sw); x_pos = analogRead(x); y_pos = analogRead(y); Serial.print("Switch: "); Serial.print(switch_state); Serial.println(); Serial.print("X: "); Serial.print(x_pos); Serial.println(); Serial.print("Y: "); Serial.println(y_pos); Serial.println(); delay(50); } |
コードの説明をしていきます。
setup()の前はピン番号の設定と、スイッチの初期状態を決定、また、シリアル通信の開始をしています。
setup()内ではx、y、スイッチのピンを入力にしています。
また、
pinMode(sw, INPUT_PULLUP);
により、スイッチは入力になると同時にマイコンチップ内のプルアップ抵抗も有効になります。
これによりスイッチが押されていない状態の時は値「1」を、スイッチが押された状態の時は値「0」を返します。
loop()内ではスイッチの状態、x、y方向の値の読み取りを行い、シリアルモニタに表示しています。
このコードを書き込んでジョイスティックを動かして、シリアルモニタを見てみます。
このように値が読み取られているのがわかると思います。
まとめ
今回はArduinoでジョイスティックを扱ってみました。
用途としては、ゲームやラジコンのコントローラーなどが考えられますね。
今回はこれで終わります。
ではまた!