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 matriciel Snake LED 16x16

Composants et fournitures

Arduino UNO
× 1
Matrice de pixels LED RVB, NeoPixel NeoMatrix
Je ne suis pas sûr de celui-ci. j'ai acheté ma matrice led sur aliexpress. Le lien est ici http://ali.pub/4wxs2s
× 1
Câbles de raccordement (générique)
× 1
Joystick analogique (Générique)
× 1
Planche à pain (générique)
× 1

À propos de ce projet

Salut! J'apprends les opportunités arduino. Et j'ai décidé de copier le jeu de serpent d'arcade classique de mon ancien nokia. Alors, voilà.

J'ai utilisé une matrice LED 16x16, un joystick et Arduino UNO. ce n'était pas facile, chaque led est connectée de manière cohérente. Donc, la logique de déplacement est un peu délicate.

Ici, vous pouvez contrôler le personnage du serpent. Mangez de la nourriture savoureuse, grandissez et mourez. Le code du programme est prêt à être mis à niveau.

Amusez-vous et profitez. Si vous l'aimez, n'hésitez pas à vous abonner à mon youtube et à mon instagram :) Ils sont en russe, mais je vais faire des sous-titres très bientôt.

Code

  • Code
CodeC/C++
#include //matrix settings#define NUM_LEDS 256#define DATA_PIN 3#define BRIGHTNESS 8//joystick settings#define pinX A2 // ось X джойстика#define pinY A1 // ось Y джойстика#define swPin 2 // кнопка джойстикаint serpent[256]; // tableau d'éléments serpentint snakeSize =2; // taille réelle du serpent int snakeSpeed ​​=500;int row; // numéro de ligneint col; // numéro de colonne entier lastDirection =135; // start directionint i, newDirection, OlddX =1, OlddY, f;int red, green, blue, fred, fgreen, fblue; //colorsCRGB leds[NUM_LEDS];void setup() { red =random(0, 255); vert =aléatoire (0, 255); bleu =aléatoire (0, 255); fred =aléatoire (127, 255); fvert =aléatoire (127, 255); fbleu =aléatoire (127, 255); Serial.begin(9600); pinMode(pinX, INPUT); pinMode(pinY, INPUT); pinMode(swPin, INPUT); digitalWrite(swPin, HAUT); FastLED.addLeds(leds, NUM_LEDS); FastLED.setBrightness(LUMINOSITÉ); for( i=0; i<=255; i++ ){ serpent[i] =0; } for( i=0; i<=snakeSize; i++ ){ snake[i] =lastDirection+i; } f =aléatoire (0, 255); FastLED.show();}int Snakedirection(int last, int dX, int dY ){ dX =map(dX, 0, 1000, -1, 1); dY =map(dY, 0, 1000, -1, 1); if(dX ==0 &&dY ==0 &&OlddX !=dX){ dX =OlddX; } if(dY ==0 &&dX ==0 &&OlddY !=dY){ dY =OlddY; } int newDirection =last; if( dX !=0 ){ // se déplaçant dans la direction X if ( row&1 ){ if( col ==0 &&dX ==1){ newDirection =last -15; } else if( col ==15 &&dX ==-1){ newDirection =last +15; } else newDirection =last + dX; // четная } else { if( col ==0 &&dX ==1){ newDirection =last +15; } else if( col ==15 &&dX ==-1 ){ newDirection =last -15; } else newDirection =last - dX; // не четная } } if( dY <0){ // se déplaçant dans la direction Y BAS if(row ==15 &&dY ==-1){newDirection =col;} else if ( row&1 ){ newDirection =last + ( col*2)+1; // четная } else { newDirection =last + (16-col-1)+(16-col); // не четная } } if( dY> 0){ // se déplaçant dans la direction Y UP if( row ==0 &&dY ==1){ newDirection =255 - col;} else if ( row&1 ){ newDirection =last - (dernière - 16*ligne) - (16 - col); // четная } else { newDirection =last - (col*2)-1; // не четная } } OlddX =dX; OlddY =dY; return newDirection;}int snakeMove(int snakeDirection){ for( i=0; i<=255; i++ ){ if( snake[i] ==snakeDirection ){ death(); } } FastLED.clear(); for(i=snakeSize; i>=1; i--){ serpent[i] =serpent[i-1]; } serpent[0] =SnakeDirection; for( i=0; i<=255; i++ ){ if( serpent[i] ){ leds[serpent[i]].setRGB(rouge, vert, bleu); } } FastLED.show(); rangée =(int)(snakeDirection/16); // numéro de ligne if ( ligne&1 ){ col =(ligne+1) * 16 - snakeDirection - 1; } else { col =snakeDirection - row * 16; } return snakeDirection;}void food( int eaten ){ if( eaten ==f ){ snakeSize++; f =aléatoire (0, 255); rouge =fred; vert =fvert; bleu =fbleu; fred =aléatoire (0, 255); fvert =aléatoire (0, 255); fbleu =aléatoire (0, 255); vitesse du serpent =vitesse du serpent / 1.1 ; } else { leds[f].setRGB(fred, fgreen, fblue); FastLED.show(); }}mort vide (){ snakeSize =2; vitesse du serpent =500 ; rouge =255 ; vert =0 ; bleu =0 ; }couleur vide(booléen sw){ if(!sw){ rouge =aléatoire(0,255); vert =aléatoire (0,255); bleu =aléatoire (0,255); }}boucle vide() { color( digitalRead(swPin) ); newDirection =Snakedirection(lastDirection, analogRead(pinX), analogRead(pinY)); lastDirection =snakeMove(newDirection); nourriture(nouvelleDirection); delay(snakeSpeed);}

Schémas


Processus de fabrication

  1. Contrôleur de jeu Arduino
  2. Jeu Arduino Pong sur matrice 24x16 avec MAX7219
  3. Jeu Arduino Nano Tetris sur matrice 16x8 maison
  4. Arduino avec Bluetooth pour contrôler une LED !
  5. Affichage de porte à matrice LED + détecteur de mouvement [Arduino Holiday]
  6. Arduino quadrupède
  7. Jeu Pixel Chaser
  8. Horloge à bascule Arduino à matrice LED unique
  9. Mixeur de couleurs Arduino RVB