前回はサーミスタを使用して温度を測定してみました。
今回はジョイスティックの値を読み取ってみましょう。
目次
ジョイスティックについて
ジョイスティックは、指を使って操作する入力センサーです。ゲームパッドやリモコンなどで広く使われているため、馴染みのある機器ではないでしょうか。ジョイスティックは、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ポート...
コメント