簡単な机上検証に使いやすいウェブベースの回路シミュレーターを用いて、以前記載したボタン・レバーの入力について見ていくことにします。
(少しは具体的にイメージしやすくなるかな、と期待)
自分自身、電気・電子系にはかなり弱いので、もしかすると理解が誤っている箇所があるかもしれません。
その際は適宜修正していきます。
はじめに
前提
まずいくつか前提となることを。
レバー・ボタンの配線としては、アーケード基板/家庭用ゲーム機ともに、基本的には両端にレバー・ボタンの線とGND線を接続します。
※レバー・ボタンのスイッチはただのスイッチなのでどちらをどちらの足に接続しても構いません。
ハードやコントローラー基板によって電圧は異なるのですが、アーケードゲーム基板では+5Vが基準になっているものが多いようです。
負論理なので、
スイッチoff時(離している時)・・・ HIGH(+5V)
スイッチon時(押している時)・・・ LOW(0V)
これを1つのスイッチに限定して簡略化した図がこちら。
レバー・ボタンの線は+5Vからプルアップ抵抗を介して接続されています。
レバー・ボタンを押したり離したりすることで、レバー・ボタンのピンにかかる電圧が変わり、その変化で入力が行われたことを検知します。
「ボタンを押すと、ボタンの線(+5V)からGNDへ向けて電流が流れるためボタンONと判定される」というような説明を見かけることがよくありますが、電流が流れること自体ではなく、電圧の変化(図中の青四角囲み部分)がポイントだと思います。
ボタンの線からGNDへ向けて電流が流れても、十分に電圧が変化しなければボタンを押した(離した)とは認識されません。
電圧について
例えば+5Vを基準とする場合に限っても、きっちり0V/+5Vとはなかなかならないものです。
ですので、例えば+4.9VでもHIGHと判定されます。
参考
TTLレベル、CMOSレベル、LVTTLレベルaimo.co.jp
アーケード基板は種類も豊富ですし、LOW/HIGHの基準にはそれぞれ若干の違いがあるような気がします。
大体の目安としてLOW:+0.8V以下/HIGH:+4.0V以上と考えていますが、実験したことはないので正しいかどうかはわかりません。
具体例
それではウェブベースの回路シミュレーターを使って具体的な例を見ていくことにしましょう。
簡略化するために最低限の数のボタンだけを表すこととし、基板のプルアップ抵抗は10kΩとしています。
使用した回路シミュレーターのサイトはこちら。
参考
Circuit Simulatorfalstad.com
基本形
普通にレバー・ボタンを接続したケースです。
ボタンを押すとLOW(0V)/ボタンを離すとHIGH(+5V)になります(負論理)。
テストモードでINPUT TESTを行った際には、LOW(0V)の時にON/HIGH(+5V)の時にOFFと表示されます。
実際にはレバーやボタンといったスイッチの数だけ配線がありますが、GNDは基準となる電圧(0V)を示せればいいので線をまとめてしまっても構いません。
LEDをつける場合(NGケース)
ボタン押した時に点灯するLEDを付けたい場合、そのままLEDをつけると電圧が下がりきらずにきちんと操作できないことがあります。
LEDをつける場合(OKケース)
ボタンを押したときだけ点灯するようにLEDを付ける場合には、ボタン配線とは別に、LED点灯用の+5Vを取ってくるのが良いでしょう。
実際に配線する場合には、基板のボタンpin側に電流が流れてしまう可能性を考慮してダイオードを挟んだ方が良いと思います。
連射装置を付ける場合①
まずは単体で連射装置を付ける場合です。
一定周期でLOW(0V)/HIGH(+5V)が切り変わる装置をGND線の代わりに接続。
ボタンを押したり離したりすることで連射のON/OFFを切り替えることが可能です。
連射装置を付ける場合②
連射ボタンと通常ボタンを付ける場合です。
連射ボタンを押したまま通常ボタンを押すと押しっぱなしになります。
(シューティングだと溜めうち等)
連射装置を付ける場合③
基板のボタンpin側に電流が流れてしまうことを考慮して、逆流防止のダイオードを付けてみた例です。
連射装置を付ける場合(3.3V装置ケース)
+5Vが基準となっているアーケードゲーム基板などに対して、電圧が異なる連射装置を単純につなげてみた例です。
この装置はGPIO電圧が+3.3Vのマイコン(Raspberry Pi等)を想定しています。
OFF時に3.6V程度までしか上がらないため、HIGHと認識されないかもしれません。
(ボタン押しっぱなしになってしまう可能性がある)
ボタン同時押し(NGケース)
同時押しボタンを付けたいと思った際に、単純に2つのボタンから線をつないでみたケースです。
単純につないだだけでは同時押しボタンとして機能しないという例。
スイッチの上段がAボタン、中段がA+Bボタン、下段がBボタンです。
全てのケースで両ボタンともONになってしまっています。
ボタン同時押し(OKケース)
ダイオードを使って同時押しボタンを実現できた例。
自分は1N4148を使用しています。
USB接続のコントローラーの場合
USBコネクタからはデバイスを動作させるための+5V/GNDとデータを差動伝送させるためのD+/D-という4ピンが出ています。
+5Vは来ていますが、レバー・ボタン両端にかかる電圧も+5Vというわけでは必ずしもなくて、同じハードでもコントローラーによって様々です。
参考
コントローラー基板の電位差リストゲームのいろいろ
しかし仕組みとしてはこれまで見てきた例と同じように考えることができます。
説明図を書こうと思ったのですが、こちらのサイトにわかりやすく記載されていましたので掲載させていただきます。
ゲーム基板やゲーム機本体からレバー・ボタンの数だけ線が伸びているハードとは違って、シリアル転送の場合はややこしく考えてしまいがちですが、USBコネクターから先(主にコントローラー基板)についてだけ考えるとわかりやすいと思います。
RetroPieを想定して、同時押しと連射回路入りで作ってみました
シミュのみで実装はしてないので、多分このままでは上手く動かないでしょう
http://tinyurl.com/qvf7ctu
おお、ありがとうございます!
参考にさせていただきます。