Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Jeu Pong sur Matrice NeoPixel avec Arduino Nano

Composants et fournitures

Outils et machines nécessaires

Applications et services en ligne

À propos de ce projet

La Matrice

Non, pas le film, la matrice NeoPixel ! Pour faire une matrice, achetez simplement un bandeau de LED NeoPixel adressables individuellement. Déroulez le bandeau et notez les flèches dessus. Vous ne pouvez les assembler que dans UNE SEULE DIRECTION, vous pourriez les endommager si l'orientation est inversée.

Jeu Pong sur Matrice NeoPixel avec Arduino Nano

J'ai utilisé un bandeau 30 LED/m de 5m et je l'ai découpé en bandes de 10 LED chacune. J'ai ensuite posé les bandes sur un morceau de carton, en alternant les orientations. J'ai ensuite coupé les fils aux bonnes longueurs et les ai soudés aux bornes des NeoPixel. Après avoir fait cela 14 fois, ma matrice était enfin prête ! Ensuite, j'ai vérifié au multimètre qu'il n'y avait pas de court-circuit, car un court-circuit grillerait le Nano, la matrice, et peut-être votre port USB (je sais par expérience). Téléversez le sketch de test neomatrix avec les paramètres NEO_BOTTOM + NEO_LEFT + NEO_COLUMNS + NEO_ZIGZAG. Si "howdy" défile sur l'affichage, la partie affichage est terminée !

Jeu Pong sur Matrice NeoPixel avec Arduino Nano

La Logique

Un jeu Pong a plusieurs objets : la raquette, les murs et la balle. Le code utilise les variables ballX et ballY pour suivre la position de la balle. La direction de la balle est gérée par soit 1 soit -1 assigné aux variables de direction. La raquette est un rectangle contrôlé via un potentiomètre mappé sur 0 à 15. La position Y de la raquette ne change pas, donc pas besoin de variable pour la mapper. Au début d'une partie, la balle démarre en 1,1 et le joueur doit laisser la balle rebondir une fois pour commencer. La physique prend en compte la direction de la balle et l'endroit où elle frappe la raquette.

Amusez-vous !

Maintenant, branchez simplement la matrice NeoPixel sur votre Arduino Nano, le +5V du joystick sur 5V, le GND sur GND Arduino, et enfin l'axe X sur A0. Amusez-vous avec votre nouveau jeu Pong ! Essayez d'ajouter plus de joueurs et une meilleure physique pour plus de challenge !

Code

Le Code Arduino (C/C++)

#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#define PIN 6

Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(15, 10, PIN,
  NEO_MATRIX_BOTTOM + NEO_MATRIX_LEFT + NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG,
  NEO_GRB + NEO_KHZ800);

// variables pour la position de la balle et de la raquette
int paddleX = 0;
int paddleY = 0;
int oldPaddleX, oldPaddleY;
int ballDirectionX = 1;
int ballDirectionY = 1;
int score = 0;
int ballSpeed = 10; // nombres plus bas = plus rapide
int ballX, ballY, oldBallX, oldBallY;

void setup() {
  Serial.begin(9600);
  // initialisation de l'affichage
  matrix.begin();
  // fond noir
  matrix.fillScreen(0);
  matrix.setTextColor(matrix.Color(0,255,0));
  matrix.print("GO");
  matrix.show();
  delay(2000);
  matrix.fillScreen(0);
  matrix.show();
}

void loop() {
  // sauvegarde largeur et hauteur de l'écran
  int myWidth = matrix.width();
  int myHeight = matrix.height();

  // mappe la position de la raquette sur celle du potentiomètre
  paddleX = map(analogRead(A0), 0, 1023, 0, 12);
  paddleY = 8;

  // efface la position précédente de la raquette si différente
  if (oldPaddleX != paddleX || oldPaddleY != paddleY) {
    matrix.fillRect(oldPaddleX, oldPaddleY, 4, 1, matrix.Color(0,0,0));
  }

  // dessine la raquette, sauvegarde la position courante comme précédente
  matrix.fillRect(paddleX, paddleY, 4, 1, matrix.Color(0,0,255));
  oldPaddleX = paddleX;
  oldPaddleY = paddleY;
  matrix.show();

  // met à jour la position de la balle et l'affiche
  if (millis() % ballSpeed < 2) {
    moveBall();
  }
  matrix.show();

  // gestion du score et réinitialisation
  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();
    delay(4000);
    ballX = random(3,11);
    ballY = random(1,1);
    matrix.fillScreen(0);
    matrix.show();
    delay(1000);
  }
  delay(5);
}

// cette fonction détermine la position de la balle à l'écran
void moveBall() {
  // si la balle sort de l'écran, inverse la direction :
  if (ballX > matrix.width() - 1 || ballX < 0) {
    ballDirectionX = -ballDirectionX;
  }
  if (ballY > matrix.height() || ballY < 0) {
    ballDirectionY = -ballDirectionY;
  }

  // vérifie si la balle et la raquette occupent le même espace
  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;
    }
  }

  // met à jour la position de la balle
  ballX += ballDirectionX;
  ballY += ballDirectionY;

  // efface la position précédente de la balle
  if (oldBallX != ballX || oldBallY != ballY) {
    matrix.drawPixel(oldBallX, oldBallY, matrix.Color(0,0,0));
  }

  // dessine la position courante de la balle
  matrix.drawPixel(ballX, ballY, matrix.Color(150,150,0));
  oldBallX = ballX;
  oldBallY = ballY;
}

// cette fonction vérifie si la balle intersecte la raquette
boolean 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;
  }
  return result;
}

Schémas

Jeu Pong sur Matrice NeoPixel avec Arduino Nano

Processus de fabrication

  1. Détecteur de langue TinyML avec Edge Impulse sur Arduino Nano 33 BLE Sense
  2. Construire un jeu gyroscopique temps réel avec Arduino Nano et capteur MPU-6050
  3. Dé numérique Arduino sur écran LCD 16x2 – Générateur aléatoire à bouton poussoir
  4. Construire un Iron Man animé avec Arduino : capteurs, sons et relais
  5. Find Me : Localisateur d'objets intelligent avec Arduino et Bluetooth
  6. Contrôleur d'humidificateur DIY avec Arduino et relais – Installation haute tension sécurisée
  7. Mesure de distance en temps réel par sonar Arduino et visualisation Processing
  8. MobBob : Construisez votre propre robot Arduino, contrôlé via smartphone Android
  9. Construire une lampe de bureau réactive à l'audio avec Arduino Nano