工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

NeoMatrix Arduino Pong

コンポーネントと消耗品

>
NeoPixelストリップ
× 1
ジャンパー線(汎用)
× 1
Arduino Nano R3
× 1
>
メスヘッダー8位置1行(0.1 ")
× 1
Perma-Protoブレッドボードハーフサイズ
× 1
アナログジョイスティック(汎用)
× 1
ロータリーポテンショメータ(汎用)
× 1

必要なツールとマシン

>
はんだごて(汎用)

アプリとオンラインサービス

>
Arduino IDE

このプロジェクトについて

マトリックス

いいえ、映画ではなく、NeoPixelマトリックスです!マトリックスを作成するには、個別にアドレス指定可能なNeoPixelLEDのストリップを1つ購入するだけです。ストリップをほどいて、その上の矢印に注意してください。それらは一方向にしか取り付けることができません。方向が間違っていると、それらを台無しにする可能性があります。

私は30led / m 5mのストリップを使用し、それぞれ10個のLEDのストリップにカットしました。次に、方向を変えながら、厚紙の上にストリップを置き始めました。次に、ワイヤーを正しい長さに切断し、NeoPixel端子にはんだ付けしました。それを14回行った後、私のマトリックスはついに完成しました!次に、マルチメーターで短絡がないことを確認しました。短絡するとNano、マトリックス、そしておそらくUSBポートが揚げるからです(私は経験から知っています)。 「NEO_BOTTOM + NEO_LEFT + NEO_COLUMNS + NEO_ZIGZAG」パラメータを使用してneomatrixテストスケッチをアップロードします。ディスプレイ上で「ハウディ」にスクロールすると、ディスプレイ部分は完了です!

ロジック

ポンゲームには、パドル、壁、ボールなど、いくつかのオブジェクトがあります。コードには、ボールの位置を追跡するボールX変数とボールY変数があります。ボールの方向は、方向変数に割り当てられた1または-1のいずれかによって処理されます。パドルは、0〜15にマッピングされているポテンショメータを介して制御される長方形です。パドルのYは変更されないため、マッピング用の変数は必要ありません。ゲームの開始時に、ボールは1,1から始まり、プレーヤーはボールを1回バウンドさせて開始する必要があります。物理学では、ボールの方向とパドルのどこに当たるかが考慮されます。

楽しい時間です!

ここで、NeoPixelマトリックスをArduino Nanoに接続し、ジョイスティックの+ 5Vを5vに接続し、GNDをArduino GNDに接続し、最後にX軸をA0に接続します。新しいポンゲームを楽しんでください!チャレンジのために、より多くのプレーヤーとより良い物理学を追加してみてください!

コード

  • Arduinoコード
  • Arduinoコード
Arduinoコード C / C ++
 #include  #include  #include  #define PIN 6Adafruit_NeoMatrix matrix =Adafruit_NeoMatrix(15、10、PIN、NEO_MATRIX_BOTTOM + NEO_MATRIX_LEFT + NEO_; //ボールとパドルの位置の変数intpaddleX =0; int paddleY =0; int oldPaddleX、oldPaddleY; int ballDirectionX =1; int ballDirectionY =1; int score =0; int ballSpeed =10; //数値が小さいほど高速ですintballX、ballY、oldBallX、oldBallY; void setup(){Serial.begin(9600); //表示を初期化しますmatrix.begin(); //黒の背景matrix.fillScreen(0); matrix.setTextColor(matrix.Color(0,255,0)); matrix.print( "GO"); matrix.show(); delay(2000); matrix.fillScreen(0); matrix.show();} void loop(){//画面の幅と高さを保存しますint myWidth =matrix.width(); int myHeight =matrix.height(); //パドルの位置をポテンショメータの位置にマッピングしますpaddleX =map(analogRead(A0)、0、1023、0、12); paddleY =8; //塗りつぶしの色を黒に設定し、現在と異なる場合は//パドルの前の位置を消去しますif(oldPaddleX!=paddleX || oldPaddleY!=paddleY){matrix.fillRect(oldPaddleX、oldPaddleY、4、1、matrix。 Color(0,0,0)); } //画面上にパドルを描画し、現在の位置を//前の位置として保存します。//if(paddleX> =0 &&paddleX <=11){matrix.fillRect(paddleX、paddleY、4、1、matrix.Color( 0,0,255)); //} // else if(paddleX <0){// paddleX =0; //matrix.fillRect(paddleX、paddleY、3、1、matrix.Color(0,0,255)); //} // else if(paddleX> =13){//} oldPaddleX =paddleX; oldPaddleY =paddleY; matrix.show(); //ボールの位置を更新し、画面上に描画しますif(millis()%ballSpeed <2){moveBall(); } matrix.show(); if(ballY> 8 &&(millis()> 10000)){スコア+ =1; matrix.fillScreen(0); matrix.setTextColor(matrix.Color(255,0,0)); matrix.setCursor(0,2); matrix.print(String(score)); matrix.show(); delay(4000); ballX =random(3,11); ballY =random(1,1); matrix.fillScreen(0); matrix.show(); delay(1000); } delay(5);} //この関数は画面上のボールの位置を決定しますvoidmoveBall(){//ボールが画面外に出る場合は、方向を逆にします:if(ballX> matrix.width()-1 || ballX <0) {ballDirectionX =-ballDirectionX; } if(ballY> matrix.height()|| ballY <0){ballDirectionY =-ballDirectionY; } //ボールとパドルが画面上の同じスペースを占めるかどうかを確認if(inPaddle(ballX、ballY、paddleX、paddleY、4、1)){if(ballX ==paddleX &&ballY ==paddleY){ballDirectionX =- ballDirectionX; ballDirectionY =-ballDirectionY; } else if(ballX ==paddleX + 3 &&ballY ==paddleY){ballDirectionX =ballDirectionX; ballDirectionY =-ballDirectionY; } else if(ballX ==paddleX + 1 &&ballY ==paddleY){ballDirectionX =-ballDirectionX; ballDirectionY =-ballDirectionY; } else if(ballX ==paddleX + 2 &&ballY ==paddleY){ballDirectionX =ballDirectionX; ballDirectionY =-ballDirectionY; }} //ボールの位置を更新するballX + =ballDirectionX; ballY + =ballDirectionY; //ボールの前の位置を消去しますif(oldBallX!=ballX || oldBallY!=ballY){matrix.drawPixel(oldBallX、oldBallY、matrix.Color(0,0,0)); } //ボールの現在の位置を描画しますmatrix.drawPixel(ballX、ballY、matrix.Color(150,150,0)); oldBallX =ballX; oldBallY =ballY;} //この関数は、ボールの位置をチェックします//ボールがパドルブール値と交差するかどうかを確認しますinPaddle(int x、int y、int rectX、int rectY、int rectWidth、int rectHeight){boolean result =false; if((x> =rectX &&x <=(rectX + rectWidth))&&(y> =rectY &&y <=(rectY + rectHeight))){result =true; }結果を返す;} 
Arduinoコード C / C ++
 #include  #include  #include  #define PIN 6Adafruit_NeoMatrix matrix =Adafruit_NeoMatrix(15、10、PIN、NEO_MATRIX_BOTTOM + NEO_MATRIX_LEFT + NEO_; //ボールとパドルの位置の変数intpaddleX =0; int paddleY =0; int oldPaddleX、oldPaddleY; int ballDirectionX =1; int ballDirectionY =1; int score =0; int ballSpeed =10; //数値が小さいほど高速ですintballX、ballY、oldBallX、oldBallY; void setup(){Serial.begin(9600); //表示を初期化しますmatrix.begin(); //黒の背景matrix.fillScreen(0); matrix.setTextColor(matrix.Color(0,255,0)); matrix.print( "GO"); matrix.show(); delay(2000); matrix.fillScreen(0); matrix.show();} void loop(){//画面の幅と高さを保存しますint myWidth =matrix.width(); int myHeight =matrix.height(); //パドルの位置をポテンショメータの位置にマッピングしますpaddleX =map(analogRead(A0)、0、1023、0、12); paddleY =8; //塗りつぶしの色を黒に設定し、現在と異なる場合は//パドルの前の位置を消去しますif(oldPaddleX!=paddleX || oldPaddleY!=paddleY){matrix.fillRect(oldPaddleX、oldPaddleY、4、1、matrix。 Color(0,0,0)); } //画面上にパドルを描画し、現在の位置を//前の位置として保存します。//if(paddleX> =0 &&paddleX <=11){matrix.fillRect(paddleX、paddleY、4、1、matrix.Color( 0,0,255)); //} // else if(paddleX <0){// paddleX =0; //matrix.fillRect(paddleX、paddleY、3、1、matrix.Color(0,0,255)); //} // else if(paddleX> =13){//} oldPaddleX =paddleX; oldPaddleY =paddleY; matrix.show(); //ボールの位置を更新し、画面上に描画しますif(millis()%ballSpeed <2){moveBall(); } matrix.show(); if(ballY> 8 &&(millis()> 10000)){スコア+ =1; matrix.fillScreen(0); matrix.setTextColor(matrix.Color(255,0,0)); matrix.setCursor(0,2); matrix.print(String(score)); matrix.show(); delay(4000); ballX =random(3,11); ballY =random(1,1); matrix.fillScreen(0); matrix.show(); delay(1000); } delay(5);} //この関数は画面上のボールの位置を決定しますvoidmoveBall(){//ボールが画面外に出る場合は、方向を逆にします:if(ballX> matrix.width()-1 || ballX <0) {ballDirectionX =-ballDirectionX; } if(ballY> matrix.height()|| ballY <0){ballDirectionY =-ballDirectionY; } //ボールとパドルが画面上の同じスペースを占めるかどうかを確認if(inPaddle(ballX、ballY、paddleX、paddleY、4、1)){if(ballX ==paddleX &&ballY ==paddleY){ballDirectionX =- ballDirectionX; ballDirectionY =-ballDirectionY; } else if(ballX ==paddleX + 3 &&ballY ==paddleY){ballDirectionX =ballDirectionX; ballDirectionY =-ballDirectionY; } else if(ballX ==paddleX + 1 &&ballY ==paddleY){ballDirectionX =-ballDirectionX; ballDirectionY =-ballDirectionY; } else if(ballX ==paddleX + 2 &&ballY ==paddleY){ballDirectionX =ballDirectionX; ballDirectionY =-ballDirectionY; }} //ボールの位置を更新するballX + =ballDirectionX; ballY + =ballDirectionY; //ボールの前の位置を消去しますif(oldBallX!=ballX || oldBallY!=ballY){matrix.drawPixel(oldBallX、oldBallY、matrix.Color(0,0,0)); } //ボールの現在の位置を描画しますmatrix.drawPixel(ballX、ballY、matrix.Color(150,150,0)); oldBallX =ballX; oldBallY =ballY;} //この関数は、ボールの位置をチェックします//ボールがパドルブール値と交差するかどうかを確認しますinPaddle(int x、int y、int rectX、int rectY、int rectWidth、int rectHeight){boolean result =false; if((x> =rectX &&x <=(rectX + rectWidth))&&(y> =rectY &&y <=(rectY + rectHeight))){result =true; }結果を返す;} 

回路図


製造プロセス

  1. TinyML-言語検出器-エッジインパルスとArduinoに基づく
  2. MPU-6050を搭載したArduinoジャイロスコープゲーム
  3. Arduino Digital Dice
  4. 鉄人
  5. Find Me
  6. Arduino加湿器制御
  7. arduinoを使用したソナーと処理IDEでの表示
  8. MobBob:Androidスマートフォンで制御されるDIY Arduino Robot
  9. Arduinoオーディオリアクティブデスクライト
  10. Arduinoジョイスティック
  11. 歩数計(Arduino 101)