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

Arduino-Pong-Spiel auf einer 24x16-Matrix mit MAX7219

Komponenten und Verbrauchsmaterialien

Arduino Nano R3
× 1
8x8 LED-Martrix-Modul mit MAX7219
× 6
Drehpotentiometer (allgemein)
× 2
Summer
× 1

Notwendige Werkzeuge und Maschinen

Lötkolben (generisch)

Apps und Onlinedienste

Arduino-IDE

Über dieses Projekt

Ich habe diese kleine Pong-Konsole auf einer Reihe von 6 Stück gebaut. 8x8 LED-Matrizen nach Anleitung und Code von:https://www.instructables.com/id/Pong/

Anstelle von maßgeschneiderten Matrixboards habe ich billige vorgefertigte 8x8-Module mit MAX7219 von Aliexpress gekauft.

Die "Clock"- und "Load" -Pins jeder Platine werden alle miteinander verbunden. "Din" -Pin von der ersten Matrix geht zu Arduino und "Dout" zu "Din" der nächsten Matrix usw. Steuerpaddel sind zwei 10k-Potentiometer, die mit den analogen Pins A0 und A1 von Arduino verbunden sind, und der Summer ist mit dem D9-Pin verbunden.

Am Ende habe ich das Gerät in eine Plastikbox und Controller in Boxen für die Elektroinstallation gesteckt.

Sie können die LedControl-Bibliothek herunterladen von:

https://github.com/wayoda/LedControl

Code

  • Code
codeArduino
//Wir müssen immer die Bibliothek einbinden #include "LedControl.h" byte rightscore; Byte linker Wert; int Toneloop =1000; byte pongdisplay[]={ // Wird beim Start verwendet, um "Pong" anzuzeigen B1111111, B00000000, B00001001, B00000000, B00001001, B00000000, B00000110, B00000000, B00000000, B00000000, B00000000, B00000000, B01110000, B00000000, B10001000, B00000000, B10001000 , B00000000, B01110000, B00000000, B00000000, B00000000, B00000000, B00000000, B1111000, B00000000, B00001000, B00000000, B00001000, B00000000, B11110000, B00000000, B00000000, B00000000, B00000000, B00000000, B11001111, B00000000, B100010001001, B00000000, B100010001, B00000000 , B11111111, B00000000, B00000000, B00000000, B00000000, B00000000, }; byte zero[]={ // Wird verwendet, um eine '0' anzuzeigen, wenn die Punktzahl angezeigt wird B00000000, B00000000, B00111100, B01000010, B01000010, B01000010, B00111100, B00000000 }; byte one[]={ // Wird verwendet, um eine '1' anzuzeigen, wenn die Punktzahl angezeigt wird B00000000, B00000000, B10001000, B10000100, B11111110, B10000000, B10000000, B00000000 }; byte two[]={ // Wird verwendet, um eine '2' anzuzeigen, wenn die Punktzahl angezeigt wird B00000000, B01100010, B01010001, B01010001, B01001001, B01000110, B00000000, B00000000};byte three[]={ // Wird verwendet, um ein ' 3' für die Anzeige der Partitur B00000000, B00100110, B01000001, B01001001, B00110110, B00000000, B00000000, B00000000};byte four[]={ // Wird verwendet, um eine '4' für die Anzeige der Partitur anzuzeigen B00000000, B00000000, B00001111, B00001000, B00001000, B11111111, B00000000, B00000000};byte five[]={ // Wird verwendet, um eine '5' anzuzeigen, wenn die Punktzahl angezeigt wird B00000000, B00000000, B10011110, B10010010, B10010010, B11110010, B00000000, B00000000};byte displayevens =0;byte displayrow=0;byte displayindex=0;byte displayodds=1;unsigned long time;unsigned long currenttime;/* Jetzt brauchen wir ein LedControl um damit zu arbeiten. Pin 12 ist mit DataIn verbunden Pin 11 ist mit CLK verbunden Pin 10 ist mit LOAD verbunden Wir haben 6 MAX72XX. */Byte-Modus;Byte-Deflekt;Byte-Übertrag;int-Zeile;LedControl lc=LedControl(12,11,10,6);long randnumber;byte dir;int startpos;byte row;byte column;long randNumber;byte start;byte diry;int pass;byte limit;#define leftpaddle 0 //linker Pong-Knopf ist mit Analogeingang 0#define rightpaddle 1 // rechter Pong-Knopf ist mit Analogeingang verbunden 1int Directionpong;int rightpongval;int leftpongval;byte blinkx;byte pong[]={ // Speichert die Position des Balls und der Paddel B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000 , B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B0000, B00000000, B0000 , B00000000, B00000000, B00000000, B00000000, B00000000}; Void setup () { PinMode (leftpaddle, INPUT); // Das Paddel ist eine Eingabe. pinMode (rechtes Paddel, INPUT); // das Paddel ist ein Eingang. Serial.begin (9600); // serielle Kommunikation zum Debuggen. Set to 9600 Baud // Diese Statemetns unten durchlaufen und richten die Matrizen auf die gegebenen Einstellungen ein lc.shutdown(0,false); lc.setIntensity(0,1); lc.clearDisplay(0); lc.shutdown(1,false); lc.setIntensity(1,1); lc.clearDisplay(1); lc.shutdown(2,false); lc.setIntensity(2,1); lc.clearDisplay(2); lc.shutdown(3,false); lc.setIntensity(3,1); lc.clearDisplay(3); lc.shutdown(4,false); lc.setIntensity(4,1); lc.clearDisplay(4); lc.shutdown(5,false); lc.setIntensity(5,1); lc.clearDisplay(5); while(displayevens<5){ while(displayrow<=7){lc.setRow(displayevens,displayrow,pongdisplay[displayindex]); Anzeigezeile++; Anzeigeindex+=2; } Anzeigezeile =0; Displayevens+=2; } Anzeigezeile =0; Anzeigeindex=1; randomSeed (analogRead (4)); start=1; time=millis(); aktuelle Zeit=millis(); Während (aktuelle Zeit <3000) { leftpongval =analogRead (leftpaddle); leftpongval=map(leftpongval,1023,20,2,0); if (leftpongval==0) {lc.setLed(3,2,7,true); lc.setLed(3,3,7,false); lc.setLed(3,4,7,false); Modus=1; Grenze=2; aufrechtzuerhalten. Wenn (leftpongval==1){lc.setLed(3,2,7,true); lc.setLed(3,3,7,true); lc.setLed(3,4,7,false); Modus=2; Grenze=1; } if (leftpongval==2) {lc.setLed (3,2,7,true); lc.setLed(3,3,7,true); lc.setLed(3,4,7,true); Modus=3; Grenze=2; } Verzögerung (50); lc.clearDisplay(3); aktuelle Zeit=millis(); }} Void Schleife () { Paddel (); Pongsim(); Anzeigebildschirm(); aufrechtzuerhalten. Void Paddles () {// liest Daten von den Paddles und zeigt diese im Array an Int searchbit; int Übertrag=0; // Serial.print ( "LeftPaddle:"); // Serial.println (analogRead (leftpaddle)); leftpongval=analogRead (linkes Paddel); leftpongval=map(leftpongval,0,1010,0,13); rightpongval=analogRead (rechtes Paddel); rightpongval=map(rightpongval,1023,20,0,13); // Serial.print ( "RightPaddle:"); // Serial.println (rightpongval); // löscht das vorherige Paddel, um das nächste anzuzeigen pong [0] =B00000000; pong[1]=B00000000; pong[46]=B00000000; pong[47]=B00000000; //------------------------------------------rechtes Paddel if(mode!=3){ if(rightpongval<=7) { rightpongval=map(rightpongval,0,7,7,0); bitSet(pong[46], rechtpongval); if(rightpongval-1>=0){ bitSet(pong[46],rightpongval-1); aufrechtzuerhalten. Sonst { BitSet (pong [47], 7); if(mode!=2){ bitSet(pong[47],6); Carry=1; }} if(mode!=2){ if(carry==0){ if(rightpongval-2>=0){ bitSet(pong[46], rightpongval-2); aufrechtzuerhalten. Sonst { BitSet (pong [47], 7); Carry=1; } } } } if(rightpongval>7){rightpongval=map(rightpongval,8,13,7,limit); bitSet(pong[47],rechtpongval); bitSet(pong[47],rechtpongval-1); if(mode!=2){ bitSet(pong[47],rightpongval-2); } } } Else{pong [46] =B11111111; Pong[47]=B11111111; lc.setRow(4,7,pong[46]); lc.setRow(5,7,pong[47]); } //----------------------------------linkes Paddel Carry=0; if (leftpongval <=7) { leftpongval =map (leftpongval, 0,7, 7,0); bitSet(pong[0], leftpongval); if(leftpongval-1>=0){ bitSet(pong[0],leftpongval-1); aufrechtzuerhalten. Sonst { BitSet (pong[1], 7); if(mode!=2){ bitSet(pong[1],6); Carry=1; }} if(mode!=2){ if(carry==0){ if(leftpongval-2>=0){ bitSet(pong[0], leftpongval-2); aufrechtzuerhalten. Sonst { BitSet (pong[1], 7); } } } } if(leftpongval>7){leftpongval=map(leftpongval,8,13,7,limit); bitSet(pong[1],linkspongval); bitSet(pong[1],leftpongval-1); if(mode!=2){ bitSet(pong[1],leftpongval-2); } } }void pongsim(){ if( ((line==2 || line==3) &&diry ==0) || ((line==44 || line==45) &&diry==1) ){ball_meets_paddle(); } if(start==1){ // Starten eines neuen Spiels randnumber=random(1,7); // Überlege dir ein zufälliges Startbit dir=random(2); // Überlege dir eine zufällige Bewegung von links nach rechts oder von rechts nach links diry=random(2); // Überlege dir eine zufällige Start-Y-Bewegungsrichtung if(diry==0){ // Wenn die y-Richtung 0 ist. Bewegung von unten nach oben line=random(30,34); // Erstelle eine zufällige Startlinie zwischen 30-34 bitSet(pong[line],randnumber); // Setze das Bit auf der Zufallszeile und das Zufallsbit gleich 1 im Pong-Array} if(diry==1){ // Wenn die y-Richtung 1 ist. Bewegung von oben nach unten Zeile=random(12,16); // Erstelle eine zufällige Startlinie zwischen 12-16 bitSet(pong[line],randnumber); // Setze das Bit auf der Zufallszeile und das Zufallsbit gleich 1 im Pong-Array} start=0; // Setze die Startvariable auf 0 zurück} if(diry==0){ // Wenn sich der Ball von unten nach oben bewegt if(dir==0){ // Wenn sich der Ball von rechts nach links bewegt if (deflect==0 &&Carry==0) {// Wenn der Ball nicht abgelenkt oder auf eine andere Matrixlinie übertragen wird-=2; // Bewegen Sie den Ball zur anderen Seite, indem Sie 2 von der Linie subtrahieren pong[line]=pong[line+2] <<1;// Verschieben Sie den Ball nach links und setzen Sie ihn gleich der neuen Linie pong[line+2] =B00000000; // Löschen Sie die alte Linie des Balls} if(carry==1){ // Wenn der Ball auf eine neue Matrixlinie übertragen werden muss-=3; // Bewegen Sie den Ball zur anderen Seite, indem Sie 3 von der Linie subtrahieren pong[line]=B00000001; // Setze die neue Zeile pong[line+3]=B00000000; // Löschen Sie die alte Linie des Balls carry=0; // Setze die Carry-Variable zurück auf 0 return; // Hier sind wir fertig} if(deflect==1){ // Wenn der Ball von der Wandlinie abprallen muss-=2; // Bewegen Sie den Ball zur anderen Seite, indem Sie 2 von der Linie subtrahieren pong[line]=B01000000; // Setze die neue Zeile pong[line+2]=B00000000; // Löschen Sie die alte Linie des Balldeflekts =0; // Setze die Deflektionsvariable zurück auf 0 dir=1; // Wechseln Sie die Richtung von links nach rechts zurück; // Hier sind wir fertig } if(bitRead(pong[line],7)==1){ // Wenn der Ball auf dem 7. Bit der Linie ist if(line==3|| line==5 || line==7 || line==9 || line==11 || line==13 || line==15 || // Wenn die Zeile eine ungerade Zeile ist line==17 || line==19 | | line==21 || line==23 || line==25 || line==27 || line==29 || line==31 || line==33 || line==35 || line ==37 || line==39 || line==41 ||line==43 || line==45){ Carry=1; // Der Ball muss auf eine andere Matrix übertragen werden return; // Hier sind wir fertig } else{ // Sonst liegt der Ball auf einer geraden Linie if(line!=2){ // Die Linie darf nicht 2 sein, weil der Ball das Paddel bei 2 deflekt=1 trifft; // Der Ball muss von der Wandrückkehr abgelenkt werden; // Hier sind wir fertig } } } } // Die Kommentare oben sollten alle untenstehenden Dinge erklären. Einige Sachen, verschiedene Parameter. if(dir==1){ if(deflect==0 &&Carry==0){ line-=2; pong[line]=pong[line+2]>> 1; pong[Zeile+2]=B00000000; } if(carry==1){ line--; pong[line]=B10000000; pong[line+1]=B00000000; Carry=0; Rückkehr; } if(deflect==1){ line-=2; pong[line]=B00000010; pong[Zeile+2]=B0000000; ablenken =0; dir=0; Rückkehr; } if(bitRead(pong[line],0)==1){ if( line==2 || line==4 || line==6 || line==8 || line==10 || line ==12 || Zeile==14 || Zeile==16 || Zeile==18 || Zeile==20 || Zeile==22 || Zeile==24 || Zeile==26 || Zeile==28 || Zeile==30 || Zeile==32 || Zeile==34 || Zeile==36|| Zeile==38 || Zeile==40 ||Zeile==42 || Zeile==44 ) { Carry=1; Rückkehr; aufrechtzuerhalten. Sonst{ if (line! =3) { ablenken =1; Rückkehr; } } } } } //------------------------------------------------------ -diry =1 unten if(diry==1){ if(dir==0){ if(deflect==0 &&Carry==0){ line+=2; pong[line]=pong[line-2] <<1; pong[line-2]=B00000000; } if(carry==1){ line+=1; pong[line]=B00000001; pong[line-1]=B00000000; Carry=0; Rückkehr; } if(deflect==1){ line+=2; pong[Zeile]=B01000000; pong[line-2]=B00000000; ablenken =0; dir=1; Rückkehr; } if(bitRead(pong[line],7)==1){ if( line==5 || line==7 || line==9 || line==11 || line==13 || line ==15 || Zeile==17 || Zeile==19 || Zeile==21 || Zeile==23 || Zeile==25 || Zeile==27 || Zeile==29 || Zeile==31 || line==33 || line==35 || line==37 || line==39|| line==41 ||line==43 || line==45){ carry=1; Rückkehr; aufrechtzuerhalten. Sonst { if (line! =44) { ablenken =1; Rückkehr; } } } } if(dir==1){ if(deflect==0 &&Carry==0){ line+=2; pong[line]=pong[line-2]>> 1; pong[line-2]=B00000000; } if (carry==1){ line+=3; pong[line]=B10000000; pong[line-3]=B00000000; Carry=0; Rückkehr; } if(deflect==1){ line+=2; pong[line]=B00000010; pong[line-2]=B0000000; ablenken =0; dir=0; Rückkehr; } if(bitRead(pong[line],0)==1){ if(line==2|| line==4 || line==6 || line==8 || line==10 || line ==12 || Zeile==14 || Zeile==16 || Zeile==18 || Zeile==20 || Zeile==22 || Zeile==24 || Zeile==26 || Zeile==28 || Zeile==30 || Zeile==32 || Zeile==34 || Zeile==36|| Zeile==38 || Zeile==40 ||Zeile==42 || Zeile==44 ) { Carry=1; Rückkehr; aufrechtzuerhalten. Sonst { if (line! =45) { ablenken =1; Rückkehr; } } } } }}void displayscreen () { displayevens =0; Anzeigezeile=0; Anzeigeindex=0; Anzeigequote=1; while(displayevens<5){ while(displayrow<=7){lc.setRow(displayevens,displayrow,pong[displayindex]); Anzeigezeile++; Anzeigeindex+=2; } Anzeigezeile =0; Displayevens+=2; } Anzeigezeile =0; Anzeigeindex=1; while(displayodds<6){ while(displayrow<8){lc.setRow(displayodds,displayrow,pong[displayindex]); Anzeigezeile++; Anzeigeindex+=2; } Anzeigezeile =0; Anzeigequote+=2; }} Void clearscreen () { Int clearing =0; while(clearing<49){pong[clearing]=B00000000; Clearing++; }}void ball_meets_paddle () { byte search1 =0; if(diry==0){ // Ball bewegt sich nach oben if (dir ==0) { // Ball bewegt sich von rechts nach links while (search1 <8) { // finde das Bit, auf dem sich der Ball befindet if (bitRead (pong .) [line],search1)==1){ //das Bit gefunden, auf dem sich der Ball befindet if(line==2){ if( search1!=6 &&search1!=7){ //Wenn es in Zeile 2 ist, mach sicher, dass es sich nicht um diese speziellen Bits handelt if (bitRead (pong[0], search1) ==1) {// prüfen, ob dort ein Paddel ist diry =1; // y-Richtung wechseln, damit es in Richtung eines anderen Paddeltons (9.500.100) geht; aufrechtzuerhalten. Sonst if(bitRead(pong[0], search1+1)==1){ diry=1; dir=1; Ton (9.500.100); Wenn (Suche1 ==0) { Übertrag =1; } } else { // kein Paddel, Ballton verpasst (9.500.300); clearscreen(); start=1; Verzögerung (1000); Scoreleft(); aufrechtzuerhalten. =B0100000; dir=1; schmutzig=1; Ton (9.500.100); } else{// verpasst, kein Paddel. Ton (9.500.300); clearscreen(); start=1; Verzögerung (1000); Scoreleft(); } } if(search1==7){//spezielles Bit, muss zuerst von der Wand abprallen if(bitRead(pong[0],6)==1){// fand das Paddle-Pong [2]=B00100000; schmutzig=1; dir=1; Zeile=2; Ton (9.500.100); Anzeigebildschirm(); } else{// verpasst, kein Paddel. Ton (9.500.300); clearscreen(); start=1; Verzögerung (1000); Scoreleft(); aufrechtzuerhalten. { // Überprüfen Sie, ob sich dort ein Paddel befindet diry=1; // y-Richtung wechseln, damit es in Richtung eines anderen Paddeltons (9.500.100) geht; aufrechtzuerhalten. Sonst if (bitRead(pong[1], search1+1)==1){ diry=1; dir=1; Ton (9.500.100); aufrechtzuerhalten. Else {// kein Paddel, Ballton verpasst (9.500.300); clearscreen(); start=1; Verzögerung (1000); Scoreleft(); aufrechtzuerhalten. =B10000000; // lösche die Zeile, in der es war dir=0; //Richtung ist gleich diry=1; // y-Richtung ändert den Ton (9.500.100); aufrechtzuerhalten. Sonst if(bitRead(pong[0],0)==1){ dir=1; schmutzig=1; Ton (9.500.100); Carry=0; } else{// kein Paddel, Ballton verpasst (9.500.300); clearscreen(); start=1; Verzögerung (1000); Scoreleft(); } } } } suche1++; aufrechtzuerhalten. { //Das Bit gefunden, auf dem sich der Ball befindet if(line==3){ if( search1!=1 &&search1!=0){ //Wenn es auf Zeile 3 ist, stellen Sie sicher, dass es sich nicht auf einem speziellen Bit befindet if( bitRead (pong [1], search1) ==1) {// prüfen, ob es ein Paddel gibt diry =1; // Wechseln Sie die y-Richtung, so dass der Ball zum anderen Paddelton geht (9.500.100); aufrechtzuerhalten. Sonst if(bitRead(pong[1], search1-1)==1){ diry=1; dir=0; Ton (9.500.100); if(search1==7){carry=1; } } else{ // kein Paddel, Ballton verpasst (9.500.300); clearscreen(); start=1; Verzögerung (1000); Scoreleft(); }} if(search1==1){ if(bitRead(pong[1],0)==1){pong[3]=B00000010; dir=0; schmutzig=1; Ton (9.500.100); aufrechtzuerhalten. Sonst { Ton (9.500.300); clearscreen(); start=1; Verzögerung (1000); Scoreleft(); }} if(search1==0){ if(bitRead(pong[1],0)==1){pong[3]=B00000100; schmutzig=1; dir=0; Zeile=3; Ton (9.500.100); Anzeigebildschirm(); aufrechtzuerhalten. Sonst { Ton (9.500.300); clearscreen(); start=1; Verzögerung (1000); Scoreleft(); aufrechtzuerhalten. // Wechseln Sie die y-Richtung, so dass der Ball zum anderen Paddelton geht (9.500.100); aufrechtzuerhalten. Sonst if(bitRead(pong[0], search1-1)==1){ diry=1; dir=0; Ton (9.500.100); aufrechtzuerhalten. Sonst {// kein Paddel, Ballton verpasst (9.500.300); clearscreen(); start=1; Verzögerung (1000); Scoreleft(); }} if(search1==0){ if(bitRead(pong[0],0)==1){//pong[2]=B00000001; Zeile=2; dir=1; schmutzig=1; Ton (9.500.100); Rückkehr; aufrechtzuerhalten. Sonst if(bitRead(pong[1],7)==1){ diry=1; dir=0; Ton (9.500.100); Carry=0; aufrechtzuerhalten. Sonst { Ton (9.500.300); clearscreen(); start=1; Verzögerung (1000); Scoreleft(); } } } } suche1++; } } } //--------------------------------------------------------- ------------------------- if(diry==1){ // Ball bewegt sich nach oben if(dir==0){ // Ball bewegt sich von rechts nach links while(search1<8){//finde das Bit, auf dem der Ball ist if(bitRead(pong[line],search1)==1){//finde das Bit, auf dem sich der Ball befindet if(line==44){ if( search1!=6 &&search1!=7){ //Wenn es in Zeile 2 ist, stellen Sie sicher, dass es nicht auf diesen speziellen Bits liegt if( bitRead(pong[46], search1)==1){ // prüfe, ob dort ein Paddel ist diry=0; // y-Richtung wechseln, damit es in Richtung eines anderen Paddeltons (9.500.100) geht; aufrechtzuerhalten. Sonst if(bitRead(pong[46], search1+1)==1){ diry=0; dir=1; Ton (9.500.100); Wenn (Suche1 ==0) { Übertrag =1; } } else { // kein Paddel, Ballton verpasst (9.500.300); clearscreen(); start=1; Verzögerung (1000); Scoreright(); aufrechtzuerhalten. diry=0; Ton (9.500.100); } else{// verpasst, kein Paddel. Ton (9.500.300); clearscreen(); start=1; Verzögerung (1000); Scoreright(); } } if(search1==7){//spezielles Bit, muss zuerst von der Wand abprallen if(bitRead(pong[46],6)==1){// fand das Paddle-Pong[44]=B00100000; diry=0; dir=1; Ton (9.500.100); Anzeigebildschirm(); Zeile=44; Rückkehr; aufrechtzuerhalten. { // Überprüfen Sie, ob dort ein Paddel ist diry=0; // y-Richtung wechseln, damit es in Richtung eines anderen Paddeltons (9.500.100) geht; aufrechtzuerhalten. Sonst if(bitRead(pong[47], search1+1)==1){ diry=0; dir=1; Ton (9.500.100); aufrechtzuerhalten. Else {// kein Paddel, Ballton verpasst (9.500.300); clearscreen(); start=1; Verzögerung (1000); Scoreright(); aufrechtzuerhalten. =B10000000; // lösche die Zeile, in der es war line=45; dir=0; //Richtung ist gleich diry=0; // y-Richtung ändert den Ton (9.500.100); aufrechtzuerhalten. Sonst if (bitRead (pong [46], 0) ==1) { dir =1; diry=0; Ton (9.500.100); Carry=0; } else{// kein Paddel, Ballton verpasst (9.500.300); clearscreen(); start=1; Verzögerung (1000); Scoreright(); } } } } suche1++; aufrechtzuerhalten. { //Das Bit gefunden, auf dem sich der Ball befindet if(line==45){ if( search1!=1 &&search1!=0){ //Wenn es sich auf Zeile 3 befindet, stellen Sie sicher, dass es sich nicht auf einem speziellen Bit befindet if( bitRead (pong [47], search1) ==1) {// prüfen, ob ein Paddel vorhanden ist diry =0; // Wechseln Sie die y-Richtung, so dass der Ball zum anderen Paddelton geht (9.500.100); aufrechtzuerhalten. Sonst if (bitRead (pong [47], search1-1) ==1) { diry =0; dir=0; Ton (9.500.100); if(search1==7){carry=1; } } else{ // kein Paddel, Ballton verpasst (9.500.300); clearscreen(); start=1; Verzögerung (1000); Scoreright(); }} if(search1==1){ if(bitRead(pong[47],0)==1){pong[43]=B00000010; dir=0; diry=0; Ton (9.500.100); aufrechtzuerhalten. Sonst { Ton (9.500.300); clearscreen(); start=1; Verzögerung (1000); Scoreright(); }} if(search1==0){ if(bitRead(pong[47],1)==1){pong[45]=B00000100; diry=0; dir=0; Zeile=45; Ton (9.500.100); Anzeigebildschirm(); aufrechtzuerhalten. Sonst { Ton (9.500.300); clearscreen(); start=1; Verzögerung (1000); Scoreright(); aufrechtzuerhalten. // Wechseln Sie die y-Richtung, so dass der Ball zum anderen Paddelton geht (9.500.100); aufrechtzuerhalten. Sonst if (bitRead (pong [46], search1-1) ==1) { diry =0; dir=0; Ton (9.500.100); aufrechtzuerhalten. Sonst {// kein Paddel, Ballton verpasst (9.500.300); clearscreen(); start=1; Verzögerung (1000); Scoreright(); }} if(search1==0){ if(bitRead(pong[46],0)==1){pong[44]=B00000001; Zeile=44; dir=1; diry=0; Ton (9.500.100); aufrechtzuerhalten. Sonst if (bitRead (pong [47], 7) ==1) { dir =0; diry=0; Ton (9.500.100); Carry=0; aufrechtzuerhalten. Sonst { Ton (9.500.300); clearscreen(); start=1; Verzögerung (1000); Scoreright(); } } } } suche1++; } } } pass=1; search1=0;}Punktzahl ungültig(){ clearscreen(); Rechteauswertung++; setcore(); Anzeigebildschirm(); if(rightscore==5){ while(blinkx++<4){ clearscreen(); Anzeigebildschirm(); Verzögerung (500); setcore(); Anzeigebildschirm(); Verzögerung (500); } blinkx=0; Rechtebewertung=0; linker Wert=0; aufrechtzuerhalten. Sonst { Verzögerung (2000); } clearscreen();}void scoreright(){ clearscreen(); leftscore++; setcore(); Anzeigebildschirm(); if(leftscore==5){ while(blinkx++<4){ clearscreen(); Anzeigebildschirm(); Verzögerung (500); setcore(); Anzeigebildschirm(); Verzögerung (500); } blinkx=0; Rechtebewertung=0; linker Wert=0; aufrechtzuerhalten. Sonst { Verzögerung (2000); } clearscreen();}void setscore(){ byte setScoreLoop=0; while(setScoreLoop<=7){ if(leftscore==0){ pong[setScoreLoop*2]=zero[setScoreLoop]; } if(leftscore==1){ pong[setScoreLoop*2]=one[setScoreLoop]; } if(leftscore==2){pong[setScoreLoop*2]=two[setScoreLoop]; } if(leftscore==3){pong[setScoreLoop*2]=three[setScoreLoop]; } if(leftscore==4){pong[setScoreLoop*2]=four[setScoreLoop]; } if(leftscore==5){ pong[setScoreLoop*2]=five[setScoreLoop]; } if(rightscore==0){ pong[32+(setScoreLoop*2)]=null[setScoreLoop]; } if(rightscore==1){ pong[32+(setScoreLoop*2)]=one[setScoreLoop]; } if(rightscore==2){ pong[32+(setScoreLoop*2)]=two[setScoreLoop]; } if(rightscore==3){ pong[32+(setScoreLoop*2)]=three[setScoreLoop]; } if(rightscore==4){ pong[32+(setScoreLoop*2)]=four[setScoreLoop]; } if(rightscore==5){ pong[32+(setScoreLoop*2)]=fünf[setScoreLoop]; } setScoreLoop++; } pong[20]=B00011000; Pong[22]=B00011000; Pong[24]=B00011000; } 

Schaltpläne


Herstellungsprozess

  1. Arduino-Gyroskop-Spiel mit MPU-6050
  2. Arduino Pong-Spiel - OLED-Display
  3. Arduino-Gamecontroller
  4. Münzprüfer mit Arduino steuern
  5. Arduino-Pong-Spiel auf einer 24x16-Matrix mit MAX7219
  6. Arduino Nano Tetris-Spiel auf hausgemachter 16x8-Matrix
  7. Arduino mit Bluetooth zur Steuerung einer LED!
  8. Pixel-Chaser-Spiel
  9. Steuerung einer LED-Matrix mit Arduino Uno
  10. NeoMatrix Arduino Pong