Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

NeoMatrix Arduino Pong

Komponenten und Verbrauchsmaterialien

NeoPixel-Streifen
× 1
Jumper (generisch)
× 1
Arduino Nano R3
× 1
Female Header 8 Position 1 Row (0.1")
× 1
Perma-Proto Breadboard halbe Größe
× 1
Analoger Joystick (generisch)
× 1
Drehpotentiometer (allgemein)
× 1

Notwendige Werkzeuge und Maschinen

Lötkolben (generisch)

Apps und Onlinedienste

Arduino-IDE

Über dieses Projekt

Die Matrix

Nein, nicht der Film, die NeoPixel-Matrix! Um eine Matrix zu erstellen, kaufen Sie einfach einen Streifen einzeln adressierbarer NeoPixel-LEDs. Wickeln Sie den Streifen ab und beachten Sie die Pfeile darauf. Sie können sie nur in EINE RICHTUNG anbringen, Sie könnten sie ruinieren, wenn die Ausrichtung falsch ist.

Ich habe einen 30 LED / m 5 m Streifen verwendet und ihn in Streifen von jeweils zehn LEDs geschnitten. Dann fing ich an, die Streifen auf ein Stück Karton zu legen, abwechselnde Ausrichtungen. Ich schneide dann die Drähte auf die richtigen Längen und löte sie an die NeoPixel-Anschlüsse. Nachdem ich das 14 Mal gemacht hatte, war meine Matrix endlich fertig! Als nächstes habe ich mit einem Multimeter überprüft, ob es keine Kurzschlüsse gab, da ein Kurzschluss den Nano, die Matrix und möglicherweise Ihren USB-Anschluss anbraten würde (ich weiß aus Erfahrung). Laden Sie die Neomatrix-Testskizze mit den Parametern "NEO_BOTTOM + NEO_LEFT + NEO_COLUMNS + NEO_ZIGZAG" hoch. Wenn es "Hallo" über das Display scrollt, bist du mit dem Display-Teil fertig!

Die Logik

Ein Pongspiel besteht aus mehreren Objekten:dem Paddel, den Wänden und dem Ball. Der Code hat die Variablen Ball X und Ball Y, die die Position des Balls verfolgen. Die Richtung des Balls wird gehandhabt, indem den Richtungsvariablen entweder eine 1 oder eine -1 zugewiesen wird. Das Paddel ist ein Rechteck, das über ein Potentiometer gesteuert wird, das auf 0 bis 15 abgebildet wird. Das Y des Paddels ändert sich nicht, daher wird keine Variable für die Zuordnung benötigt. Zu Beginn eines Spiels beginnt der Ball bei 1,1 und der Spieler muss den Ball einmal abprallen lassen, um zu beginnen. Die Physik berücksichtigt die Richtung des Balls und wo er auf das Paddel trifft.

Viel Spaß!

Schließen Sie nun einfach die NeoPixel-Matrix Ihres Arduino Nano, die +5V am Joystick an 5V, die GND an Arduino GND und schließlich die X-Achse an A0 an. Viel Spaß mit Ihrem neuen Pong-Spiel! Versuchen Sie, mehr Spieler und eine bessere Physik für eine Herausforderung hinzuzufügen!

Code

  • Der Arduino-Code
  • Arduino-Code
Der Arduino-CodeC/C++
#include #include #include #define PIN 6Adafruit_NeoMatrix-Matrix =Adafruit_NeoMatrix(15, 10, PIN, NEO_MATRIX_ZB + NEOTRIZ_B + NEOFTCO NEO_MATRIX_BOTTOM + NEOFTCOX NEO_MATRIX_NSAG_NATRIZ + NEOFTMA;// Variablen für die Position von Ball und Paddleint PaddleX =0;int PaddleY =0;int oldPaddleX, oldPaddleY;int ballDirectionX =1;int ballDirectionY =1;int score =0;int ballSpeed ​​=10; // niedrigere Zahlen sind Fasterint ballX, ballY, oldBallX, oldBallY;void setup () { Serial.begin (9600); // die Anzeige initialisieren matrix.begin(); // schwarzer Hintergrund matrix.fillScreen(0); matrix.setTextColor(matrix.Color(0,255,0)); matrix.print("GO"); matrix.show(); Verzögerung (2000); matrix.fillScreen(0); matrix.show();}void loop() { // Breite und Höhe des Bildschirms speichern int myWidth =matrix.width(); int myHeight =matrix.height(); // die Position des Paddels der Position der Potentiometer zuordnen PaddleX =map (analogRead (A0), 0, 1023, 0, 12); paddelY =8; // setze die Füllfarbe auf schwarz und lösche die vorherige // Position des Paddles, falls anders als vorhanden if (oldPaddleX !=PaddleX || oldPaddleY !=PaddleY) { matrix.fillRect(oldPaddleX, oldPaddleY, 4, 1,matrix. Farbe(0,0,0)); } // Paddle auf dem Bildschirm zeichnen, aktuelle Position speichern // als vorherige.//if(paddleX>=0 &&PaddleX <=11){ matrix.fillRect(paddleX, PaddleY, 4, 1,matrix.Color( 0,0,255)); //} // sonst 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(); // Aktualisieren Sie die Position des Balls und zeichnen Sie ihn auf dem Bildschirm if (millis () % ballSpeed ​​<2) { moveBall (); } matrix.show(); if(ballY> 8 &&(millis()> 10000)){ score +=1; matrix.fillScreen(0); matrix.setTextColor(matrix.Color(255,0,0)); matrix.setCursor(0,2); matrix.print(String(Score)); matrix.show(); Verzögerung (4000); ballX =zufällig (3,11); ballY =zufällig(1,1); matrix.fillScreen(0); matrix.show(); Verzögerung (1000); } delay(5);} // diese Funktion bestimmt die Position des Balls auf dem Bildschirmvoid moveBall() { // Wenn der Ball aus dem Bildschirm verschwindet, kehre die Richtung um:if (ballX> matrix.width() - 1 || ballX <0) { ballDirectionX =-ballDirectionX; } if (ballY> matrix.height() || ballY <0) { ballDirectionY =-ballDirectionY; } // prüfen, ob der Ball und das Paddel den gleichen Platz auf dem Bildschirm einnehmen if (inPaddle(ballX, ballY, PaddleX, PaddleY, 4, 1)) { if(ballX ==PaddleX &&ballY ==PaddleY){ ballDirectionX =- ballDirectionX; ballDirectionY =-ballDirectionY; aufrechtzuerhalten. Sonst if(ballX ==PaddleX + 3 &&ballY ==PaddleY) { ballDirectionX =ballDirectionX; ballDirectionY =-ballDirectionY; aufrechtzuerhalten. Sonst if(ballX ==PaddleX + 1 &&ballY ==PaddleY){ ballDirectionX =-ballDirectionX; ballDirectionY =-ballDirectionY; aufrechtzuerhalten. Sonst if(ballX ==PaddleX + 2 &&ballY ==PaddleY) { ballDirectionX =ballDirectionX; ballDirectionY =-ballDirectionY; } } // aktualisiere die Position des Balls ballX +=ballDirectionX; ballY +=ballDirectionY; // Lösche die vorherige Position des Balls if (oldBallX !=ballX || oldBallY !=ballY) { matrix.drawPixel(oldBallX, oldBallY,matrix.Color(0,0,0)); } // Zeichne die aktuelle Position des Balls matrix.drawPixel(ballX, ballY,matrix.Color(150,150,0)); oldBallX =ballX; oldBallY =ballY;} // diese Funktion überprüft die Position des Balls // um zu sehen, ob er sich mit dem Paddleboolean schneidet; if ((x>=rectX &&x <=(rectX + rectWidth)) &&(y>=rectY &&y <=(rectY + rectHeight))) { result =true; } Ergebnis zurückgeben;}
Arduino-CodeC/C++
#include #include #include #define PIN 6Adafruit_NeoMatrix-Matrix =Adafruit_NeoMatrix(15, 10, PIN, NEO_MATRIX_ZB + NEOTRIZ_B + NEOFTCO NEO_MATRIX_BOTTOM + NEOFTCOX NEO_MATRIX_NSAG_NATRIZ + NEOFTMA;// Variablen für die Position von Ball und Paddleint PaddleX =0;int PaddleY =0;int oldPaddleX, oldPaddleY;int ballDirectionX =1;int ballDirectionY =1;int score =0;int ballSpeed ​​=10; // niedrigere Zahlen sind Fasterint ballX, ballY, oldBallX, oldBallY;void setup () { Serial.begin (9600); // die Anzeige initialisieren matrix.begin(); // schwarzer Hintergrund matrix.fillScreen(0); matrix.setTextColor(matrix.Color(0,255,0)); matrix.print("GO"); matrix.show(); Verzögerung (2000); matrix.fillScreen(0); matrix.show();}void loop() { // Breite und Höhe des Bildschirms speichern int myWidth =matrix.width(); int myHeight =matrix.height(); // die Position des Paddels der Position der Potentiometer zuordnen PaddleX =map (analogRead (A0), 0, 1023, 0, 12); paddelY =8; // setze die Füllfarbe auf schwarz und lösche die vorherige // Position des Paddles, falls anders als vorhanden if (oldPaddleX !=PaddleX || oldPaddleY !=PaddleY) { matrix.fillRect(oldPaddleX, oldPaddleY, 4, 1,matrix. Farbe(0,0,0)); } // Paddle auf dem Bildschirm zeichnen, aktuelle Position speichern // als vorherige.//if(paddleX>=0 &&PaddleX <=11){ matrix.fillRect(paddleX, PaddleY, 4, 1,matrix.Color( 0,0,255)); //} // sonst 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(); // Aktualisieren Sie die Position des Balls und zeichnen Sie ihn auf dem Bildschirm if (millis () % ballSpeed ​​<2) { moveBall (); } matrix.show(); if(ballY> 8 &&(millis()> 10000)){ score +=1; matrix.fillScreen(0); matrix.setTextColor(matrix.Color(255,0,0)); matrix.setCursor(0,2); matrix.print(String(Score)); matrix.show(); Verzögerung (4000); ballX =zufällig (3,11); ballY =zufällig(1,1); matrix.fillScreen(0); matrix.show(); Verzögerung (1000); } delay(5);} // diese Funktion bestimmt die Position des Balls auf dem Bildschirmvoid moveBall() { // Wenn der Ball aus dem Bildschirm verschwindet, kehre die Richtung um:if (ballX> matrix.width() - 1 || ballX <0) { ballDirectionX =-ballDirectionX; } if (ballY> matrix.height() || ballY <0) { ballDirectionY =-ballDirectionY; } // prüfen, ob der Ball und das Paddel den gleichen Platz auf dem Bildschirm einnehmen if (inPaddle(ballX, ballY, PaddleX, PaddleY, 4, 1)) { if(ballX ==PaddleX &&ballY ==PaddleY){ ballDirectionX =- ballDirectionX; ballDirectionY =-ballDirectionY; aufrechtzuerhalten. Sonst if(ballX ==PaddleX + 3 &&ballY ==PaddleY) { ballDirectionX =ballDirectionX; ballDirectionY =-ballDirectionY; aufrechtzuerhalten. Sonst if(ballX ==PaddleX + 1 &&ballY ==PaddleY){ ballDirectionX =-ballDirectionX; ballDirectionY =-ballDirectionY; aufrechtzuerhalten. Sonst if(ballX ==PaddleX + 2 &&ballY ==PaddleY) { ballDirectionX =ballDirectionX; ballDirectionY =-ballDirectionY; } } // aktualisiere die Position des Balls ballX +=ballDirectionX; ballY +=ballDirectionY; // Lösche die vorherige Position des Balls if (oldBallX !=ballX || oldBallY !=ballY) { matrix.drawPixel(oldBallX, oldBallY,matrix.Color(0,0,0)); } // Zeichne die aktuelle Position des Balls matrix.drawPixel(ballX, ballY,matrix.Color(150,150,0)); oldBallX =ballX; oldBallY =ballY;} // diese Funktion überprüft die Position des Balls // um zu sehen, ob er sich mit dem Paddleboolean schneidet; if ((x>=rectX &&x <=(rectX + rectWidth)) &&(y>=rectY &&y <=(rectY + rectHeight))) { result =true; } Ergebnis zurückgeben;}

Schaltpläne


Herstellungsprozess

  1. TinyML-Spracherkennung basierend auf Edge Impulse &Arduino
  2. Arduino-Gyroskop-Spiel mit MPU-6050
  3. Arduino Digital Dice
  4. Iron Man
  5. Finde mich
  6. Arduino-Befeuchtersteuerung
  7. Sonar mit Arduino und Anzeige bei der Verarbeitung von IDE
  8. MobBob:DIY-Arduino-Roboter, der von einem Android-Smartphone gesteuert wird
  9. Arduino Audio Reactive Desk Light
  10. Arduino-Joystick