Arduinoメモリゲームを作る
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
アプリとオンラインサービス
> |
|
このプロジェクトについて
ゲーム「サイモン」を覚えていますか?私の年齢(70年代生まれ)の多くの人は、それを演奏するのに多くの時間を失うようになりました。ゲームはシンプルで、順番に点灯する色の異なる4つのボタンがあり、順番を繰り返す必要がありました。毎回、あなたはそれを正しく理解しました、ゲームはあなたに最後に追加の色で再びあなたにシーケンスを与えるでしょう。
私はずっと前にクリスマス用に1つ入手しましたが、その後移動して移動し、さらに移動したため、移動によって開梱されることのない多くのボックスの1つでゲームが失われました...
「大人」として、私はArduinoの喜びを発見し、それによって、長い間失った友人を復活させる機会を得ました。
このチュートリアルでは、Arduino UnoをいくつかのLEDと抵抗器、および比較的単純な回路を使用して同様のゲームを作成する方法を示します。
プログラム自体は初心者には少し複雑かもしれないので、コードでそれが何をどのように行うかを説明しようとしました。
このゲームを実行する最も簡単な方法はこれです。
1)図のように回路を正確に接続します。ワイヤーの色は関係ないので、黒いワイヤーが足りなくなっても大丈夫です。 :)
2)ソースコードをお気に入りのArduinoエディターに貼り付けて、ボードにアップロードします
3)ゲームをプレイする
ゲームは約3秒後に開始され、すべてのLEDが5回ゆっくり点滅します。
<図>1つまたは複数のLEDが点滅しない場合は、配線を確認してください。私のボードでは、非常に小さなボタンが常に適切に配置されているとは限らず、飛び出す傾向があります。
配線が正しく見える場合は、動作しているLEDと動作していないLEDを反転させて、配線なのかLED自体なのかを確認してください。
5回の点滅が完了すると、1つのLEDが点灯します。どちらかはわかりませんが、驚きです:)そのLEDのボタンを押してください。このLEDが再び点灯し、続いて新しいLEDが点灯します。正しいボタンを順番に押してください...あなたは私がそれでどこに行くのかわかります...
<図>その後、かなりすぐに、それらすべてが急速に点滅するのがわかります。それはあなたが負けたことを意味します。 :D
与えられた最後のシーケンスが再生されるので、ポイントを数えた後、ゲームが再開していることを示す前の5回のゆっくりとした点滅が続きます。
各ボタンを押す時間は2秒です。
どうぞ!楽しんでください!
もう少し難しくしたいですか?コードの一番上の行を別の値に変更してみませんか?
#define PLAYER_WAIT_TIME 2000
または、LEDがある場合は、別のLEDを追加することもできます...このためには、最初に回路のこの部分を再現する必要があります:
<図>ここのオレンジ色のワイヤーは、Arduinoの未使用のピンに接続されます(ただし、0と1は避けてください)
次に、コードの次の行を変更します。
byte noPins =4bytepins [] ={2、13、10、8};
ピン6に1つのLEDを追加すると、コードは次のようになります
byte noPins =5bytepins [] ={2、13、10、8、6};
Arduinoコードを書くための小さなヒント:
void setup(){delay(3000); Serial.begin(9600); Reset(); }
setup()関数の最初のステートメントとして短い遅延を設定します。 Arduinoを無限ループに入れたり、何らかの方法でロックしたりするのは非常に簡単です。それが起こった場合、その短い遅延により、Arduinoをリセットし、再びロックする前に空白のスケッチをアップロードできます。 。
私は最終的にこの小さなアイデアを採用し、ポータブルにしました...
同様の(まだはるかに高度な)ゲームの本当にクールなアイデアを見たい場合。 PeterKentによるこのhttps://www.instructables.com/id/Lego-Mini-Memory-Gameを確認してください。彼はレゴカーへのインターフェースを備えたモバイルでゲームを作りました。本当にすごい!
コード
- メモリゲームコード
メモリゲームコード Arduino
これはゲームのコード全体です。お気に入りのIDEにコピーして貼り付け、Arduinoにアップロードするだけです。#define PLAYER_WAIT_TIME 2000 //ボタンを押すまでの時間-2秒のバイトシーケンス[100]; //ライトシーケンスバイトのストレージcurLen =0; //シーケンスバイトの現在の長さinputCount =0; //プレーヤーが特定のターンバイトで(正しい)ボタンを押した回数lastInput =0; // playerbyteからの最後の入力expRd =0; // playerboolによって点灯すると想定されるLEDbtnDwn =false; //ボタンが押されているかどうかを確認するために使用されますboolwait =false; //プログラムは、ユーザーがボタンを押すのを待っていますか?resetFlag =false; //プレーヤーがバイトを失ったらsoundPin =5であることをプログラムに示すために使用されます。 //スピーカーoutputbytenoPins =4; //ボタン/ LEDの数(これに取り組んでいる間、私は2つのLEDのみを使用していました)//追加のLED /ボタン/抵抗の組み合わせを追加することでゲームを難しくすることができます。bytepins[] ={2、13、10 、8}; //ボタン入力ピンとLED出力ピン-ボタンを他のピンに接続したい場合は、これらの値を変更します//要素の数はlong inputTime =0未満のnoPinsと一致する必要があります。 //ユーザー入力間の遅延のタイマー変数voidsetup(){delay(3000); //これは、arduinoを接続した後に呼吸する時間を与えるためです-Serial.begin(9600);が必要な場合は削除できます。 //シリアルモニターを開始します。 Reset();} ////// 'dir'の値に基づいてすべてのピンをINPUTまたはOUTPUTとして設定する限り、これも削除できます/// void setPinDirection(byte dir){for(byte i =0; i速い|大きな数->遅い/// void flash(short freq){setPinDirection(OUTPUT); /// LEDをアクティブ化していますfor(int i =0; i <5; i ++){writeAllPins(HIGH);ビープ音(50); delay(freq); writeAllPins(LOW); delay(freq); }} //////この関数は、すべてのゲーム変数をデフォルト値にリセットします/// void Reset(){flash(500); curLen =0; inputCount =0; lastInput =0; expRd =0; btnDwn =false;待機=false; resetFlag =false;} //////ユーザーが失われました/// void Lose(){flash(50); } ////// arduinoはユーザーに何を記憶する必要があるかを示します///最後のシーケンスが何であったかを示すために負けた後にも呼び出されます/// void playSequence(){//保存されたシーケンスをループして適切なものを点灯します次に、LED for(int i =0; i PLAYER_WAIT_TIME){//プレーヤーが許可された時間を超える場合、DoLoseProcess(); //すべてが失われます:(return;} if(!btnDwn){// expRd =sequence [inputCount]; //プレーヤーに期待する値を見つけますSerial.print( "Expected:"); //シリアルモニターの出力-上記のSerial.beginを削除した場合は削除する必要がありますSerial.println(expRd); //シリアルモニター出力-上記のSerial.beginを削除した場合は削除する必要がありますfor(int i =0; i
回路図
simonsays_siKds3Jmk2.fzz 製造プロセス