レトロでハードな物語

レトロなゲーム機・マイコン・中古デバイスなどをArduinoやAVRで再活用する方法を模索しています。

見慣れないテンキー再び その2

2018年08月18日 | 電子工作

前回やっと例のテンキーがPCのテンキーとして利用できるようになりました。しかもキーのカスタマイズが自由自在なので、色々活用できそうです。
でも、せっかく動作にマイコンを使っているのでテンキーだけでなく色々なデバイスにして楽しみたくなってきます。たとえば、液晶パネルをつけて電卓にするとか...。

とりあえず、すぐにできそうなのゲームパッド化ですね。もちろんテンキーのままでもRetroPieなどで利用できるのですが、面白そうなのでやってみましょう。

ゲームパッドにするには配線は変えずスケッチの変更だけですむので、いつも利用しているArduinoJoystickLibraryを使って書き換えます。

tenkey_game_pad.ino

4、6、8、2キーが方向キーで、19個のボタンのついたゲームパッドになりました。もし、手持ちのテンキーで試す方がいらっしゃるなら、キーマトリックスの配列数の変更とclear、shiftキーの記述を削除すればこのスケッチを利用できると思います。

テンキー・ゲームパッドによる操作は結構快適です。片手で扱えるので、寝転びながらゲームが出来てなかなかいいですね。でも、シミュレーションゲームやテーブルゲームなどの思考型のゲームには最適ですが、アクションゲームで使うのはかなり厳しくなります。

せっかくなので、アナログスティックも追加してどんなゲームにも対応できるようにしましょう。

使うのはこれ。

昔に購入したUSBジョイスティック表面のラバー加工がベタベタになったので、外側のケースは捨てて中の部品だけジャンク品として取っておいたものです。なんとなく取ってあっただけで、再利用出来る日が来るとは思ってもいませんでした。
似たようなものはAmazonでも販売しているので、試してみたいという人でも入手は難しくはないと思います。

このアナログステイックは2つの可変抵抗とタクトスイッチ1つで構成されています。可変抵抗は3つの端子の両端の端子にVccとGNDをつなぎ、ステックを動かすと抵抗値が変化して真ん中の端子の電圧が変わるというものです。このアナログ的に変化する電圧を読み取ってスティックの傾きを調べるということらしいです。結構、簡単な仕組みだったんですね。

ArduinoにはA/Dコンバーターという回路が搭載されていて、特定のピンでアナログ電圧を読み取れます。
今更ですが、Arduinoで初めてのアナログ入力となります。楽しみです。

それでは配線です。アナログスティックのX軸、Y軸の可変抵抗のアナログ電圧をテンキーで使用していないアナログ入力ピンへ(もちろん、それぞれのVccとGNDもつなぎます。)、タクトスイッチも空いているピン(デジタル入力はどのピンでもOK。)につなぎます。



つぎに、スケッチです。

tenkey_game_stick.ino

Arduinoのアナログ入力値は、特に設定しなければ0〜1023になります。今回はこのデフォルト値のまま使用します。
可変抵抗の両端子のVccとGNDはどちらがVccでもいいのですが、つなぎ方でアナログ電圧の増減が反転します。このスケッチは、スティック上で抵抗0、下で1023、左0、右1023となるつなぎ方で利用します。
可変抵抗のアナログ電圧はX軸をA3、Y軸をA2につないでいますが、アナログ入力に使用するピンは初期化する必要がありません。このスケッチでもなにも設定していません。
タクトスイッチは3ピンとGNDにつなぎました。

スケッチの#define文で定義されているMARGINの値はスティックの遊びの範囲で、アナログ電圧がプラス・マイナスこの値以内ならスティックは中央にあるまま動いていないと判定します。アナログ電圧はちょっとの振動でも微妙に変化するので、常にスティックが動いていることになり、PCと通信しっぱなしになっているようなので遊びを設けてみました。通信はスティックを操作しているときだけに限られるので、多少Arduinoの消費電力を抑えられるかもしれません。(ただの推測です。)
ちなみに、#define MARGIN 20を削除またはコメントアウトすると遊びがなくなり、常にスティックの変化をPCに伝えるようになります。

行き当りばったりな感じでも、こんなに簡単にジョイスティックが作れるなんてArduinoって本当に素晴らしいですね。



最新の画像もっと見る

コメントを投稿