Arduinoのアナログ入力を使って複数ボタンを制御する

マイコン/Arduino

1回目で押しボタンスイッチを実装する方法、2回目でアナログ入力を処理してラダーペダルやジョイスティックを自作する方法を紹介しました。

これだけあれば一通り作ることができるのですが、まじめに作りこもうとするとArduino側のピンが足りなくてボタンを欲しい数だけ実装できないといったことが起こります。ArduinoJoystickLibraryでは少なくとも32個まではボタンを定義できるのですが、Promicroだと使えるピンが20個ぐらいしかありません。

今回は一つのアナログ入力ピンで複数のスイッチの入力を受ける方法を紹介します。

今回紹介する方法とは別に、マトリックスで複数のボタン入力を受ける方法もあります。

概要

Promicroのアナログ入力をつかいます。特定のボタンを押したときに特定の電圧になるように回路を組みます。アナログ入力を使うのでノイズに弱くなりますし、複数ボタンの押下検知は面倒(今回紹介する回路だとたぶんムリ)なのがデメリットです。

細かい理屈は抜きにして3ボタンを実装する場合と4ボタンを実装する場合の具体例を示します。

3ボタン実装する場合

ProMicroのアナログ入力に3ボタンつなぐ方法

各ボタンを押したときのA1の電圧は次のようになります。

全OFF:  Vcc
S1 ON:  0
S2 ON:  0.285Vcc
S3 ON:  0.615Vcc

電圧を読み取って、対応させたいゲームコントローラーのボタンをONにすればOKです。
以前の記事にも書きましたが、きちんと”ボタンを離す”処理も入れてあげてください。
また、電圧判断のための閾値は適当なので、各自チューニングをしてみてください。

#include <Joystick.h>
#include <Wire.h>

Joystick_ Joystick = Joystick_(
0x03, // reportid
JOYSTICK_TYPE_GAMEPAD, // type
3, // button count
0, // hat switch count
false, // x axis enable
false, // y axis enable
false, // z axis enable
false, // right x axis enable
false, // right y axis enable
false, // right z axis enable
false, // rudder enable
false, // throttle enable
false, // accelerator enable
false, // brake enable
false // steering enable
);

const int AnalogPin = 1;

void setup() {
  Joystick.begin();
}

void loop() {
 int Val = analogRead(AnalogPin);

 if(Val <100)
 {
   //Sw1が押された
   Joystick.pressButton(0);
   Joystick.releaseButton(1);
   Joystick.releaseButton(2);
 }
 else if(Val < 450)
 {
   //Sw2が押された
   Joystick.releaseButton(0);
   Joystick.pressButton(1);
   Joystick.releaseButton(2);
 }
 else if(Val < 800)
 {
   //Sw3が押された
   Joystick.releaseButton(0);
   Joystick.releaseButton(1);
   Joystick.pressButton(2);
 }
 else
 {
   //ボタンが押されていない
   Joystick.releaseButton(0);
   Joystick.releaseButton(1);
   Joystick.releaseButton(2); 
 }
 delay(10);
}

4ボタン実装する場合

4ボタン実装する場合は次のような配線になります。

ProMicroのアナログ入力に4ボタンつなぐ方法

全OFF:  Vcc
S1 ON:  0
S2 ON:  0.25Vcc
S3 ON:  0.5Vcc
S4 ON:  0.75Vcc

スケッチは省略しますが、3ボタンの場合のスケッチを少し変更すればOKです。応用すれば1つの入力ピンで5ボタン、6ボタンに対応させることも可能です。

まとめ

このようにして、アナログ入力1ピンを使って複数のデジタルピンの入力を受けるようにすればマイコンのピン数不足が多少緩和されるのではないでしょうか?

ProMicro
「ProMicro」の記事一覧です。

コメント