目次 [ Contents ]
プログラミングだけでチャタリングを回避する方法の解説時、サンプルとしてシュウォッチもどきの連射ゲームのスケッチを書きましたが、それを進化させてみました。
必要な最低限のパーツはモーメンタリスイッチです。後はPCとArduinoを接続すればゲームを楽しめます。お子さんの夏休み自由課題なんかにもいいかもしれないですね。
“ゲージ判定”を使った、スイッチ読み取りライブラリを作ってみました。
(2017.6.26 追記)
簡単連打ゲーム “SHOOTER”
最低必要条件
- パソコン
- Arduino(Arduino UNO3でのみ動作確認済み)
- モーメンタリースイッチ
接続
ピンの接続は以下の通り。Arduino内蔵プルアップを使うので超単純です。
遊び方
Arduinoを通電すれば動きます。ArduinoIDEのシリアルモニタを立ち上げてください。
ルールは10秒間に何回スイッチを連打できるかを競う、それだけです。スイッチを押せば3秒カウント後ゲームがスタートします(13ピンのLEDが点滅します)。結果によってコメントが変わります。高得点を目指し連打しましょう。
ゲーム中にキャンセルしたければ、スイッチを長押しします。
高得点はEEPROMに記録されるので電源が切れても残ります。ベストスコアをリセットしたければ、スイッチを押したままArduinoの電源を入れます。
チューニング
マイコンによってはチャタリング回避の値を調整する必要があるかもしれません。以下のスケッチで、チャタリングと実際に押したときの値が分かります。2桁以上の差があると思うので、その結果を踏まえて適切なPUSH_SHORTの値を調べます。
#define SW 4 #define PUSH_SHORT 700 unsigned long intvl = 0; void setup() { pinMode(SW, INPUT_PULLUP); Serial.begin(9600); } void loop() { unsigned long gauge = 0; while (!digitalRead(SW)) gauge++; if (gauge > 1) { char cate[2][5] = {"PUSH", "CHTT"}; bool jdg = (gauge <= PUSH_SHORT) ? 1 : 0; Serial.print(cate[jdg]); Serial.print(":"); Serial.println(gauge); intvl = millis(); } if ((millis() - intvl) > 1000) { Serial.println(); intvl = millis(); } }
機能拡張
他にパーツを足せば、レトロゲームのような雰囲気のある感じで楽しめます。
LED
カウントダウンなど合図を確認するのに便利です。標準的なLEDで大丈夫ですが、ちゃんと抵抗も用意しましょう。
ブザー(ピエゾスピーカー)
一応音が出るようにしました。ショボイ音がレトロ感を演出してくれます。音さえ出れば安いやつでOKです。僕は手っ取り早く100円ショップのキッチンタイマーから抜き取りました。音量を調節したければ抵抗を挟んでください。
8*2 キャラクターLCDディスプレイ(I2C接続)
PCのシリアルモニタではなく、画面に出すといっそう昔の携帯ゲーム機ぽくなります。接続例では定格が5Vを想定しているので、気をつけてください。
配線図(拡張)
以上の拡張パーツと電池も用意すれば、携帯ゲームにもできます!
“SHOOTER” スケッチ
お楽しみください。