Project 14.1 ジョイスティック/Joystick

前回はサーミスタを使用して温度を測定してみました。

あわせて読みたい
Project 13.1 サーミスタ/Thermometer 前回はフォトレジスターを使って周辺の明るさに応じてLEDの光量をコントロールしてみました。 https://kaneshige.org/?p=406 今回はサーミスタを使用して温度を測定して...

今回はジョイスティックの値を読み取ってみましょう。

目次

ジョイスティックについて

ジョイスティックは、指を使って操作する入力センサーです。ゲームパッドやリモコンなどで広く使われているため、馴染みのある機器ではないでしょうか。ジョイスティックは、2つの軸(X軸またはY軸)について同時に操作信号を入力することができ、平面上の位置や方向を制御するのに活用されます。この他に、押し込むことで第3の軸方向(Z軸)にも対応しています。

ジョイスティック・モジュールは内部に2つの回転式ポテンショメータ(可変抵抗器)を90度の角度で配置しています。 これらのポテンショメータが、上下左右の2方向の傾きを同時に検出できるように配置されています。さらに、垂直方向(押し込む動作)にプッシュボタンスイッチがついており、ユーザーがジョイスティックを押したことを検知できるようになっています。

ジョイスティックから読み取るデータは、軸によってデータの種類が異なります。

  • X軸およびY軸のデータ: アナログデータです。ADC(アナログ/デジタル変換器)を使用して、これらの軸の傾き(角度や量)を取得します。
  • Z軸のデータ デジタルデータです。GPIO(汎用入出力端子)を使って、押し込みの有無を読み取ることができます。ただし、オプションとしてADCを利用してZ軸のデータを読み取ることも可能です。

回路図

接続図

コード

/**********************************************************************
  Filename    : Joystick
  Description : Read data from joystick.
  Auther      : www.freenove.com
  Modification: 2022/10/21
**********************************************************************/
int xyzPins[] = {14, 13, 12};   //x,y,z pins
void setup() {
  Serial.begin(115200);
  pinMode(xyzPins[2], INPUT_PULLUP);  //z axis is a button.
}

void loop() {
  int xVal = analogRead(xyzPins[0]);
  int yVal = analogRead(xyzPins[1]);
  int zVal = digitalRead(xyzPins[2]);
  Serial.printf("X,Y,Z: %d,\t%d,\t%d\n", xVal, yVal, zVal);
  delay(500);
}

今回もプログラミング要素は少なかったですね。個人的な好みでいうと、xyzPinsという変数はxPin、yPin、zPinの3つにしたほうが可読性が上がって良い様に思います。

次回はシフトレジスタを使用したLEDの制御を試してみましょう。

あわせて読みたい
Project 15.1 シフトレジスター/Flowing Water Light 以前、バーLEDアレイを使って流れるようなライトを作りました。 https://kaneshige.org/?p=209 この時の実装ではESP32-S3の GPIOポートが10個使われました。 GPIOポート...
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

金重総合研究所の主席研究員。
子供の頃から研究者を目指し、ライフワークとして日々様々な研究をしています。
経営・マネジメント・金融・DXあたりが本職です。
私を採用したい人、私と一緒に働きたい人、一緒に知識を肥やしていきたい人はぜひお声がけ下さい。

コメント

コメントする

目次