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

NeoMatrix Arduino Pong

Composants et fournitures

Bande NeoPixel
× 1
Câbles de raccordement (générique)
× 1
Arduino Nano R3
× 1
En-tête féminin 8 position 1 ligne (0,1")
× 1
Planche à pain Perma-Proto demi-taille
× 1
Joystick analogique (Générique)
× 1
Potentiomètre rotatif (générique)
× 1

Outils et machines nécessaires

Fer à souder (générique)

Applications et services en ligne

Arduino IDE

À propos de ce projet

La matrice

Non, pas le film, la matrice NeoPixel ! Pour créer une matrice, il suffit d'acheter une bande de LED NeoPixel adressables individuellement. Déroulez la bande et notez les flèches dessus. Vous ne pouvez les attacher que dans UNE SEULE DIRECTION, vous pourriez les ruiner si l'orientation n'est pas correcte.

J'ai utilisé une bande de 30 LED/m 5m et je les ai découpées en bandes de dix LED chacune. J'ai ensuite commencé à poser les bandes sur un morceau de papier cartonné, en alternant les orientations. J'ai ensuite coupé les fils aux bonnes longueurs et les ai soudés aux bornes NeoPixel. Après avoir fait cela 14 fois, ma matrice était enfin terminée ! Ensuite, j'ai vérifié avec un multimètre pour m'assurer qu'il n'y avait pas de court-circuit, car un court-circuit ferait griller le Nano, la matrice et peut-être votre port USB (je le sais par expérience). Téléchargez le croquis de test neomatrix avec les paramètres "NEO_BOTTOM + NEO_LEFT + NEO_COLUMNS + NEO_ZIGZAG". S'il fait défiler « bonjour » sur l'écran, vous avez terminé avec la partie écran !

La logique

Un jeu de pong a plusieurs objets :la raquette, les murs et la balle. Le code a des variables ball X et ball Y, qui gardent une trace de la position de la balle. La direction de la balle est gérée par un 1 ou un -1 attribué aux variables de direction. La palette est un rectangle contrôlé via un potentiomètre mappé sur 0 à 15. Le Y de la palette ne changera pas, donc une variable pour la mapper n'est pas nécessaire. Au début d'un jeu, le ballon commence à 1,1 et le joueur doit permettre au ballon de rebondir une fois pour commencer. La physique prend en compte la direction de la balle et l'endroit où elle a touché la raquette.

Moment de plaisir !

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

Code

  • Le code Arduino
  • Code Arduino
Le code ArduinoC/C++
#include #include #include #define PIN 6Adafruit_NeoMatrix matrix =Adafruit_NeoMatrix(15, 10, PIN, NEO_MATRIX_BOTTOM + NEO +_NEORIX_MAT_LEFTRIX);// variables pour la position de la balle et paddleint paddleX =0;int paddleY =0;int oldPaddleX, oldPaddleY;int ballDirectionX =1;int ballDirectionY =1;int score =0;int ballSpeed ​​=10; // les nombres inférieurs sont plus rapides int ballX, ballY, oldBallX, oldBallY;void setup() { Serial.begin(9600); // initialise la matrice d'affichage.begin(); // fond noir matrice.fillScreen(0); matrice.setTextColor(matrix.Color(0,255,0)); matrice.print("ALLER"); matrice.show(); retard (2000); matrice.fillScreen(0); matrix.show();}void loop() { // enregistre la largeur et la hauteur de l'écran int myWidth =matrix.width(); int maHauteur =matrice.hauteur(); // mappe l'emplacement de la palette à la position des potentiomètres paddleX =map(analogRead(A0), 0, 1023, 0, 12); pagaieY =8 ; // définit la couleur de remplissage sur noir et efface la // position précédente de la palette si différente de la présente if (oldPaddleX !=paddleX || oldPaddleY !=paddleY) { matrix.fillRect(oldPaddleX, oldPaddleY, 4, 1,matrix. Couleur(0,0,0)); } // dessine la raquette à l'écran, enregistre la position actuelle // comme la précédente.//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; matrice.show(); // met à jour la position de la balle et dessine-la à l'écran if (millis() % ballSpeed ​​<2) { moveBall(); } matrice.show(); if(ballY> 8 &&(millis()> 10000)){ score +=1; matrice.fillScreen(0); matrix.setTextColor(matrix.Color(255,0,0)); matrice.setCursor(0,2) ; matrice.print(String(score)); matrice.show(); retard (4000); bouleX =aléatoire (3,11); bouleY =aléatoire(1,1) ; matrice.fillScreen(0); matrice.show(); retard(1000); } delay(5);}// cette fonction détermine la position de la balle sur screenvoid 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 à l'écran 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 actuelle de la balle matrix.drawPixel(ballX, ballY,matrix.Color(150,150,0)); oldBallX =ballX; oldBallY =ballY;}// cette fonction vérifie la position de la balle// pour voir si elle coupe le paddleboolean inPaddle(int x, int y, int rectX, int rectY, int rectWidth, int rectHeight) { résultat booléen =false; if ((x>=rectX &&x <=(rectX + rectWidth)) &&(y>=rectY &&y <=(rectY + rectHeight))) { result =true; } renvoie le résultat ;}
Code ArduinoC/C++
#include #include #include #define PIN 6Adafruit_NeoMatrix matrix =Adafruit_NeoMatrix(15, 10, PIN, NEO_MATRIX_BOTTOM + NEO +_NEORIX_MAT_LEFTRIX);// variables pour la position de la balle et paddleint paddleX =0;int paddleY =0;int oldPaddleX, oldPaddleY;int ballDirectionX =1;int ballDirectionY =1;int score =0;int ballSpeed ​​=10; // les nombres inférieurs sont plus rapides int ballX, ballY, oldBallX, oldBallY;void setup() { Serial.begin(9600); // initialise la matrice d'affichage.begin(); // fond noir matrice.fillScreen(0); matrice.setTextColor(matrix.Color(0,255,0)); matrice.print("ALLER"); matrice.show(); retard (2000); matrice.fillScreen(0); matrix.show();}void loop() { // enregistre la largeur et la hauteur de l'écran int myWidth =matrix.width(); int maHauteur =matrice.hauteur(); // mappe l'emplacement de la palette à la position des potentiomètres paddleX =map(analogRead(A0), 0, 1023, 0, 12); pagaieY =8 ; // définit la couleur de remplissage sur noir et efface la // position précédente de la palette si différente de la présente if (oldPaddleX !=paddleX || oldPaddleY !=paddleY) { matrix.fillRect(oldPaddleX, oldPaddleY, 4, 1,matrix. Couleur(0,0,0)); } // dessine la raquette à l'écran, enregistre la position actuelle // comme la précédente.//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; matrice.show(); // met à jour la position de la balle et dessine-la à l'écran if (millis() % ballSpeed ​​<2) { moveBall(); } matrice.show(); if(ballY> 8 &&(millis()> 10000)){ score +=1; matrice.fillScreen(0); matrix.setTextColor(matrix.Color(255,0,0)); matrice.setCursor(0,2) ; matrice.print(String(score)); matrice.show(); retard (4000); bouleX =aléatoire (3,11); bouleY =aléatoire(1,1) ; matrice.fillScreen(0); matrice.show(); retard(1000); } delay(5);}// cette fonction détermine la position de la balle sur screenvoid 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 à l'écran 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 actuelle de la balle matrix.drawPixel(ballX, ballY,matrix.Color(150,150,0)); oldBallX =ballX; oldBallY =ballY;}// cette fonction vérifie la position de la balle// pour voir si elle coupe le paddleboolean inPaddle(int x, int y, int rectX, int rectY, int rectWidth, int rectHeight) { résultat booléen =false; if ((x>=rectX &&x <=(rectX + rectWidth)) &&(y>=rectY &&y <=(rectY + rectHeight))) { result =true; } renvoie le résultat ;}

Schémas


Processus de fabrication

  1. Détecteur de langage TinyML basé sur Edge Impulse et Arduino
  2. Jeu de gyroscope Arduino avec MPU-6050
  3. Dés numériques Arduino
  4. Iron Man
  5. Trouvez-moi
  6. Contrôle de l'humidificateur Arduino
  7. Sonar utilisant arduino et affichage lors du traitement de l'IDE
  8. MobBob :Robot Arduino DIY contrôlé par smartphone Android
  9. Lampe de bureau réactive audio Arduino