ELEGOO:Lesson 13

Lesson 13 Analog Joystick Module

アナログジョイスティックです。X方向 / Y方向のアナログ値入力と、押し込みによるデジタルスイッチが付いているモジュールです。

接続は、電源とGND、アナログ HORZ / VERT、デジタル SELの5つ。

アナログ入力使うのは初めてです。A0 / A1 に繋ぎます。

// Arduino pin numbers
const int SW_pin = 2; // digital pin connected to switch output
const int X_pin = 0; // analog pin connected to X output
const int Y_pin = 1; // analog pin connected to Y output

void setup() {
    pinMode(SW_pin, INPUT);
    digitalWrite(SW_pin, HIGH);
    Serial.begin(9600);
}
void loop() {
    Serial.print("Switch: ");
    Serial.print(digitalRead(SW_pin));
    Serial.print("\n");
    Serial.print("X-axis: ");
    Serial.print(analogRead(X_pin));
    Serial.print("\n");
    Serial.print("Y-axis: ");
    Serial.println(analogRead(Y_pin));
    Serial.print("\n\n");
    delay(500);
}

ここんとこ数回のLessonでは、実処理はライブラリの中、ってことが多かったのですが、今回はライブラリ使わずにシンプル。

初期化では。デジタル入力のボタン(pin:2)をINPUTモードにしてHIGHを書き込んでプルアップ。
後は、digitalRead() で値を読んで表示。

アナログ入力は特に初期化必要ないみたいですね。analogRead() で値を読み込んで表示してるだけです。

ピン番号がデジタルと被ってるのですが、analogRead() で読むとアナログ側のピンを見てくれるってことでいいのかな?

実行して、コンソールを確認。

アナログ入力は、0~1023の値を取り、ニュートラル地点で512になりました。

スティックは、可動範囲の半分ぐらい行ったところで、すでに値がMAX / MINになりますね。大雑把に扱うとデジタル入力と変わらん感じ。


M5Stackにもアナログ入力ポートありますので、同じように試してみました。(光通信でも使ったやつだ!)

こっちも、実際に値が変わるのは、ジョイスティック可動範囲の半分ぐらいの範囲でした。

ニュートラルで 2420~2480あたり。MIN 142、MAX 3134 でした。X、YどっちかがMAX 3134になると、両方ともMAX 3134になってしまうという現象が…。ニュートラル値から考えて、MINとMAXの値のバランスも取れてないですね。MAXで5000ぐらい行かないと変なはず。

電源を 3.3 Vにしてみたところ、ニュートラルで1600~1730あたりになりました。MIN 142、MAX 3134 で変わらず。これだとだいたい合ってますね。両方MAXになってしまう現象も起きないので、良さそうです。

atten(machine.ADC.ATTN_11DB) での指定で、入力ボルトが

machine.ADC.ATTN_0DB:0dB = 0~1V
machine.ADC.ATTN_2_5DB:2.5dB = 0~1.33V
machine.ADC.ATTN_6DB:6db = 0~2v
machine.ADC.ATTN_11DB:11db = 0 ~ 3.55V

となるみたいです。スイッチとの間に抵抗を挟むとかしたほうがいいのかな?