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
となるみたいです。スイッチとの間に抵抗を挟むとかしたほうがいいのかな?