Juego Arduino Pong en Matrix 24x16 con MAX7219
Componentes y suministros
| × | 1 | ||||
| × | 6 | ||||
| × | 2 | ||||
| × | 1 |
Herramientas y máquinas necesarias
|
Aplicaciones y servicios en línea
|
Acerca de este proyecto
Construí esta pequeña consola pong en una matriz de 6 piezas. Matrices LED de 8x8 de acuerdo con las instrucciones y el código de:https://www.instructables.com/id/Pong/
En lugar de placas de matriz hechas a medida, compré módulos 8x8 baratos y listos para usar con MAX7219 en Aliexpress.
Los pines "reloj" y "carga" de cada placa se conectan entre sí. El pin "Din" de la primera matriz va a Arduino, y "Dout" a "Din" de la siguiente matriz, etc. Las paletas de control son dos potenciómetros de 10k conectados a los pines analógicos A0 y A1 de Arduino y el zumbador está conectado al pin D9.
Al final puse el dispositivo en una caja de plástico y los controladores en cajas para instalación eléctrica.
Puede descargar la biblioteca LedControl desde:
https://github.com/wayoda/LedControl
Código
- código
código Arduino
// Siempre tenemos que incluir la librería #include "LedControl.h" byte rightscore; byte leftscore; int toneloop =1000; byte pongdisplay [] ={// Se utiliza al iniciar para mostrar "Pong" B11111111, B00000000, B00001001, B00000000, B00001001, B00000000, B00000110, B00000000, B00000000, B00000000, B00000000, B00000000, B01110000, B00000000, B10001000, B00000000, B10001000 , B00000000, B01110000, B00000000, B00000000, B00000000, B00000000, B00000000, B11110000, B00000000, B00001000, B00000000, B00001000, B00000000, B11110000, B00000000, B00000000, B00000000, B00001000000, B00000000, B11001111, B0000, B00001, B00001 , B11111111, B00000000, B00000000, B00000000, B00000000, B00000000,}; byte cero [] ={// Se usa para mostrar un '0' para cuando se muestra la puntuación B00000000, B00000000, B00111100, B01000010, B01000010, B01000010, B00111100, B00000000}; byte one [] ={// Se usa para mostrar un '1' para cuando se muestra la puntuación B00000000, B00000000, B10001000, B10000100, B11111110, B10000000, B10000000, B00000000}; byte two [] ={// Se usa para mostrar un '2' para cuando se muestra la puntuación B00000000, B01100010, B01010001, B01010001, B01001001, B01000110, B00000000, B00000000}; byte tres [] ={// Se usa para mostrar un ' 3 'para cuando se muestra la puntuación B00000000, B00100110, B01000001, B01001001, B00110110, B00000000, B00000000, B00000000}; byte cuatro [] ={// Se utiliza para mostrar un' 4 'para cuando se muestra la puntuación B00000000, B00000000, B00001111, B00001000, B00001000, B11111111, B00000000, B00000000}; byte cinco [] ={// Se usa para mostrar un '5' para cuando se muestra la puntuación B00000000, B00000000, B10011110, B10010010, B10010010, B11110010, B00000000, B00000000}; visualización de bytes =0; byte displayrow =0; byte displayindex =0; byte displayodds =1; unsigned long time; unsigned long currenttime; / * Ahora necesitamos un LedControl para trabajar. El pin 12 está conectado al DataIn El pin 11 está conectado al CLK El pin 10 está conectado a LOAD Tenemos 6 MAX72XX. * / modo byte; byte deflect; byte carry; int line; 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 // la perilla pong izquierda está conectada a la entrada analógica 0 # define rightpaddle 1 // la perilla pong derecha está conectada a la entrada analógica 1int directionpong; int rightpongval; int leftpongval; byte blinkx; byte pong [] ={// Almacena la posición de la pelota y las palas 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, B00000000, B00000000, B00000000, B00000000}; configuración vacía () {pinMode (paleta izquierda, ENTRADA); // la paleta es una entrada. pinMode (paleta derecha, ENTRADA); // la paleta es una entrada. Serial.begin (9600); // comunicación serial para depuración. Establecer en 9600 baudios // Estos estados a continuación pasan y configuran las matrices con los valores dados lc.shutdown (0, false); lc.setIntensity (0,1); lc.clearDisplay (0); lc.shutdown (1, falso); lc.setIntensity (1,1); lc.clearDisplay (1); lc.shutdown (2, falso); lc.setIntensity (2,1); lc.clearDisplay (2); lc.shutdown (3, falso); lc.setIntensity (3,1); lc.clearDisplay (3); lc.shutdown (4, falso); lc.setIntensity (4,1); lc.clearDisplay (4); lc.shutdown (5, falso); lc.setIntensity (5,1); lc.clearDisplay (5); while (displayrow <5) {while (displayrow <=7) {lc.setRow (displayrow, displayrow, pongdisplay [displayindex]); displayrow ++; displayindex + =2; } displayrow =0; diafragmas + =2; } displayrow =0; displayindex =1; randomSeed (analogRead (4)); inicio =1; tiempo =milis (); tiempo actual =milis (); while (tiempo actual-tiempo <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, falso); lc.setLed (3,4,7, falso); modo =1; límite =2; } if (leftpongval ==1) {lc.setLed (3,2,7, true); lc.setLed (3,3,7, verdadero); lc.setLed (3,4,7, falso); modo =2; límite =1; } if (leftpongval ==2) {lc.setLed (3,2,7, true); lc.setLed (3,3,7, verdadero); lc.setLed (3,4,7, verdadero); modo =3; límite =2; } retraso (50); lc.clearDisplay (3); tiempo actual =milis (); }} bucle vacío () {paletas (); pongsim (); pantalla de visualización(); } void paddles () {// lee datos de las paletas y los muestra en la matriz int searchbit; int carry =0; // Serial.print ("LeftPaddle:"); // Serial.println (analogRead (paleta izquierda)); leftpongval =analogRead (paleta izquierda); leftpongval =map (leftpongval, 0,1010,0,13); rightpongval =analogRead (paleta derecha); rightpongval =map (rightpongval, 1023,20,0,13); // Serial.print ("RightPaddle:"); // Serial.println (rightpongval); // limpia la paleta anterior para mostrar la siguiente pong [0] =B00000000; pong [1] =B00000000; pong [46] =B00000000; pong [47] =B00000000; // ------------------------------- paleta derecha if (mode! =3) {if (rightpongval <=7) {rightpongval =map (rightpongval, 0,7,7,0); bitSet (pong [46], rightpongval); if (rightpongval-1> =0) {bitSet (pong [46], rightpongval-1); } else {bitSet (pong [47], 7); if (modo! =2) {bitSet (pong [47], 6); llevar =1; }} if (mode! =2) {if (carry ==0) {if (rightpongval-2> =0) {bitSet (pong [46], rightpongval-2); } else {bitSet (pong [47], 7); llevar =1; }}}} if (rightpongval> 7) {rightpongval =map (rightpongval, 8,13,7, límite); bitSet (pong [47], rightpongval); bitSet (pong [47], rightpongval-1); if (modo! =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]); } // ---------------------------------- transporte de paleta izquierda =0; if (leftpongval <=7) {leftpongval =map (leftpongval, 0,7,7,0); bitSet (pong [0], leftpongval); if (leftpongval-1> =0) {bitSet (pong [0], leftpongval-1); } else {bitSet (pong [1], 7); if (modo! =2) {bitSet (pong [1], 6); llevar =1; }} if (mode! =2) {if (carry ==0) {if (leftpongval-2> =0) {bitSet (pong [0], leftpongval-2); } else {bitSet (pong [1], 7); }}}} if (leftpongval> 7) {leftpongval =map (leftpongval, 8,13,7, límite); bitSet (pong [1], leftpongval); bitSet (pong [1], leftpongval-1); if (modo! =2) {bitSet (pong [1], leftpongval-2); }}} void pongsim () {if (((línea ==2 || línea ==3) &&diry ==0) || ((línea ==44 || línea ==45) &&diry ==1) ) {ball_meets_paddle (); } if (start ==1) {// Comenzando un nuevo juego randnumber =random (1,7); // Crea un bit de inicio aleatorio dir =random (2); // Crea un movimiento aleatorio que comienza de izquierda a derecha o de derecha a izquierda diry =random (2); // Proponga una dirección de movimiento y inicial aleatoria if (diry ==0) {// Si la dirección y es 0. Movimiento de la línea inferior a la superior =aleatorio (30,34); // Crea una línea de inicio aleatoria entre 30-34 bitSet (pong [line], randnumber); // Establece el bit en la línea aleatoria y el bit aleatorio igual a 1 en la matriz pong} if (diry ==1) {// Si la dirección y es 1. Movimiento de la línea superior a la inferior =aleatorio (12,16); // Crea una línea de inicio aleatoria entre 12-16 bitSet (pong [line], randnumber); // Establece el bit en la línea aleatoria y el bit aleatorio igual a 1 en la matriz pong} start =0; // Establece la variable inicial hacia atrás igual a 0} if (diry ==0) {// Si la bola se mueve de abajo hacia arriba if (dir ==0) {// Si la bola se mueve de derecha a izquierda si (deflect ==0 &&carry ==0) {// Si la pelota no se está desviando o trasladando a otra línea de matriz- =2; // Progresa la pelota hacia el otro lado restando 2 de la línea pong [línea] =pong [línea + 2] <<1; // Desplaza la pelota hacia la izquierda y ponla igual a la nueva línea pong [línea + 2] =B00000000; // Limpia la línea anterior de la bola} if (carry ==1) {// Si la bola tiene que trasladarse a una nueva línea de matriz- =3; // Progresa la pelota hacia el otro lado restando 3 de la línea pong [línea] =B00000001; // Establecer la nueva línea pong [línea + 3] =B00000000; // Limpiar la línea anterior del acarreo de pelota =0; // Vuelve a poner la variable de acarreo en 0 return; // Hemos terminado aquí} if (deflect ==1) {// Si la pelota tiene que desviar la línea de la pared- =2; // Progresa la pelota hacia el otro lado restando 2 de la línea pong [línea] =B01000000; // Establecer la nueva línea pong [línea + 2] =B00000000; // Limpiar la línea anterior de la pelota deflect =0; // Vuelve a establecer la variable deflect en 0 dir =1; // Cambia la dirección de izquierda a derecha return; // Hemos terminado aquí} if (bitRead (pong [línea], 7) ==1) {// Si la bola está en el 7º bit de la línea if (línea ==3 || línea ==5 || línea ==7 || línea ==9 || línea ==11 || línea ==13 || línea ==15 || // Si la línea es una línea impar línea ==17 || línea ==19 | | línea ==21 || línea ==23 || línea ==25 || línea ==27 || línea ==29 || línea ==31 || línea ==33 || línea ==35 || línea ==37 || línea ==39 || línea ==41 || línea ==43 || línea ==45) {llevar =1; // La pelota debe trasladarse a otra matriz de retorno; // Hemos terminado aquí} else {// De lo contrario, la pelota está en una línea par if (line! =2) {// La línea no puede ser 2 porque la pelota se encuentra con la paleta en 2 deflect =1; // La pelota debe desviarse del retorno de la pared; // Hemos terminado aquí}}}} // Los comentarios anteriores deberían explicar todo lo que se encuentra a continuación. Algunas cosas, diferentes parámetros. if (dir ==1) {if (deflect ==0 &&carry ==0) {line- =2; pong [línea] =pong [línea + 2]>> 1; pong [línea + 2] =B00000000; } si (llevar ==1) {línea--; pong [línea] =B10000000; pong [línea + 1] =B00000000; llevar =0; regreso; } si (desviar ==1) {línea- =2; pong [línea] =B00000010; pong [línea + 2] =B0000000; desviar =0; dir =0; regreso; } if (bitRead (pong [línea], 0) ==1) {if (línea ==2 || línea ==4 || línea ==6 || línea ==8 || línea ==10 || línea ==12 || línea ==14 || línea ==16 || línea ==18 || línea ==20 || línea ==22 || línea ==24 || línea ==26 || línea ==28 || línea ==30 || línea ==32 || línea ==34 || línea ==36 || línea ==38 || línea ==40 || línea ==42 || línea ==44) {llevar =1; regreso; } else {if (line! =3) {deflect =1; regreso; }}}}} // ------------------------------------------- -diry =1 debajo if (diry ==1) {if (dir ==0) {if (deflect ==0 &&carry ==0) {line + =2; pong [línea] =pong [línea-2] <<1; pong [línea-2] =B00000000; } si (llevar ==1) {línea + =1; pong [línea] =B00000001; pong [línea-1] =B00000000; llevar =0; regreso; } si (desviar ==1) {línea + =2; pong [línea] =B01000000; pong [línea-2] =B00000000; desviar =0; dir =1; regreso; } if (bitRead (pong [línea], 7) ==1) {if (línea ==5 || línea ==7 || línea ==9 || línea ==11 || línea ==13 || línea ==15 || línea ==17 || línea ==19 || línea ==21 || línea ==23 || línea ==25 || línea ==27 || línea ==29 || línea ==31 || línea ==33 || línea ==35 || línea ==37 || línea ==39 || línea ==41 || línea ==43 || línea ==45) {llevar =1; regreso; } else {if (line! =44) {deflect =1; regreso; }}}} if (dir ==1) {if (deflect ==0 &&carry ==0) {line + =2; pong [línea] =pong [línea-2]>> 1; pong [línea-2] =B00000000; } si (llevar ==1) {línea + =3; pong [línea] =B10000000; pong [línea-3] =B00000000; llevar =0; regreso; } si (desviar ==1) {línea + =2; pong [línea] =B00000010; pong [línea-2] =B0000000; desviar =0; dir =0; regreso; } if (bitRead (pong [línea], 0) ==1) {if (línea ==2 || línea ==4 || línea ==6 || línea ==8 || línea ==10 || línea ==12 || línea ==14 || línea ==16 || línea ==18 || línea ==20 || línea ==22 || línea ==24 || línea ==26 || línea ==28 || línea ==30 || línea ==32 || línea ==34 || línea ==36 || línea ==38 || línea ==40 || línea ==42 || línea ==44) {llevar =1; regreso; } else {if (line! =45) {deflect =1; regreso; }}}}}} pantalla de visualización vacía () {Displayevens =0; displayrow =0; displayindex =0; displayodds =1; while (displayrow <5) {while (displayrow <=7) {lc.setRow (displayrow, displayrow, pong [displayindex]); displayrow ++; displayindex + =2; } displayrow =0; diafragmas + =2; } displayrow =0; displayindex =1; while (displayodds <6) {while (displayrow <8) {lc.setRow (displayodds, displayrow, pong [displayindex]); displayrow ++; displayindex + =2; } displayrow =0; displayodds + =2; }} void clearcreen () {int clearing =0; while (aclarando <49) {pong [aclarando] =B00000000; limpieza ++; }} void ball_meets_paddle () {byte search1 =0; if (diry ==0) {// bola moviéndose hacia arriba if (dir ==0) {// bola moviéndose de derecha a izquierda while (search1 <8) {// encontrar el bit en el que está la bola if (bitRead (pong [línea], búsqueda1) ==1) {// encontró el bit en el que está la bola if (línea ==2) {if (búsqueda1! =6 &&búsqueda1! =7) {// si está en la línea 2, haga seguro que no está en esos bits especiales if (bitRead (pong [0], search1) ==1) {// verifica que haya una paleta allí diry =1; // cambia la dirección y para que se dirija hacia otro tono de paleta (9.500.100); } más si (bitRead (pong [0], búsqueda1 + 1) ==1) {diry =1; dir =1; tono (9.500.100); if (búsqueda1 ==0) {acarreo =1; }} else {// sin paleta, se perdió el tono de la pelota (9.500.300); pantalla clara(); inicio =1; retraso (1000); scoreleft (); }} if (search1 ==6) {// bit especial, necesita desviar la misma ruta en la que viene if (bitRead (pong [0], 7) ==1) {// hay una paleta ahí pong [2] =B01000000; dir =1; diry =1; tono (9.500.100); } else {// me lo perdí, sin remo. tono (9.500.300); pantalla clara(); inicio =1; retraso (1000); scoreleft (); }} if (search1 ==7) {// bit especial, necesita rebotar en la pared primero if (bitRead (pong [0], 6) ==1) {// encontró el paddle pong [2] =B00100000; diry =1; dir =1; línea =2; tono (9.500.100); pantalla de visualización(); } else {// me lo perdí, sin remo. tono (9.500.300); pantalla clara(); inicio =1; retraso (1000); scoreleft (); }}} if (línea ==3) {if (búsqueda1! =7) {// si está en la línea 3, asegúrese de que no esté en esos bits especiales if (bitRead (pong [1], búsqueda1) ==1) {// verifica que haya una paleta allí diry =1; // cambia la dirección y para que se dirija hacia otro tono de paleta (9.500.100); } más si (lectura de bits (pong [1], búsqueda1 + 1) ==1) {diry =1; dir =1; tono (9.500.100); } else {// sin paleta, se perdió el tono de la pelota (9.500.300); pantalla clara(); inicio =1; retraso (1000); scoreleft (); }} if (search1 ==7) {// bit especial, debe trasladarse a la siguiente matriz if (bitRead (pong [1], 7) ==1) {// encontró una paleta allí // pong [2] =B10000000; // limpia la fila en la que estaba dir =0; // la dirección es la misma diry =1; // y la dirección cambia el tono (9.500.100); } más si (bitRead (pong [0], 0) ==1) {dir =1; diry =1; tono (9.500.100); llevar =0; } else {// sin paleta, se perdió el tono de la pelota (9.500.300); pantalla clara(); inicio =1; retraso (1000); scoreleft (); }}}} búsqueda1 ++; }} if (dir ==1) {// la bola se mueve de izquierda a derecha while (search1 <8) {// encuentra el bit en el que está la bola if (bitRead (pong [line], search1) ==1) {// encontró el bit en el que está la bola if (línea ==3) {if (search1! =1 &&search1! =0) {// si está en la línea 3, asegúrese de que no esté en un bit especial if ( bitRead (pong [1], search1) ==1) {// comprueba si hay una paleta diry =1; // cambia la dirección y para que la bola se dirija hacia el otro tono de paleta (9.500.100); } más si (lectura de bits (pong [1], búsqueda1-1) ==1) {diry =1; dir =0; tono (9.500.100); if (buscar1 ==7) {llevar =1; }} else {// sin paleta, se perdió el tono de la pelota (9.500.300); pantalla clara(); inicio =1; retraso (1000); scoreleft (); }} if (buscar1 ==1) {if (bitRead (pong [1], 0) ==1) {pong [3] =B00000010; dir =0; diry =1; tono (9.500.100); } else {tono (9.500.300); pantalla clara(); inicio =1; retraso (1000); scoreleft (); }} if (búsqueda1 ==0) {if (bitRead (pong [1], 0) ==1) {pong [3] =B00000100; diry =1; dir =0; línea =3; tono (9.500.100); pantalla de visualización(); } else {tono (9.500.300); pantalla clara(); inicio =1; retraso (1000); scoreleft (); }}} if (línea ==2) {if (búsqueda1! =0) {if (bitRead (pong [0], búsqueda1) ==1) {// verifica si hay una paleta diry =1; // cambia la dirección y para que la bola se dirija hacia el otro tono de paleta (9.500.100); } más si (bitRead (pong [0], búsqueda1-1) ==1) {diry =1; dir =0; tono (9.500.100); } else {// sin paleta, se perdió el tono de la pelota (9.500.300); pantalla clara(); inicio =1; retraso (1000); scoreleft (); }} if (búsqueda1 ==0) {if (bitRead (pong [0], 0) ==1) {// pong [2] =B00000001; línea =2; dir =1; diry =1; tono (9.500.100); regreso; } más si (bitRead (pong [1], 7) ==1) {diry =1; dir =0; tono (9.500.100); llevar =0; } else {tono (9.500.300); pantalla clara(); inicio =1; retraso (1000); scoreleft (); }}}} búsqueda1 ++; }}} // --------------------------------------------- ------------------------- if (diry ==1) {// bola moviéndose hacia arriba if (dir ==0) {// bola moviéndose de derecha a izquierda while (search1 <8) {// encuentra el bit en el que está la bola if (bitRead (pong [line], search1) ==1) {// encontró el bit en el que está la bola if (line ==44) {if (search1! =6 &&search1! =7) {// si está en la línea 2, asegúrese de que no esté en esos bits especiales if (bitRead (pong [46], search1) ==1) {// compruebe que hay una paleta allí diry =0; // cambia la dirección y para que se dirija hacia otro tono de paleta (9.500.100); } más si (lectura de bits (pong [46], búsqueda1 + 1) ==1) {diry =0; dir =1; tono (9.500.100); if (búsqueda1 ==0) {acarreo =1; }} else {// sin paleta, se perdió el tono de la pelota (9.500.300); pantalla clara(); inicio =1; retraso (1000); scoreright (); }} if (search1 ==6) {// bit especial, necesita desviar la misma ruta en la que viene if (bitRead (pong [46], 7) ==1) {// hay una paleta allí dir =1; diry =0; tono (9.500.100); } else {// me lo perdí, sin remo. tono (9.500.300); pantalla clara(); inicio =1; retraso (1000); scoreright (); }} if (search1 ==7) {// bit especial, necesita rebotar en la pared primero if (bitRead (pong [46], 6) ==1) {// encontró el paddle pong [44] =B00100000; diry =0; dir =1; tono (9.500.100); pantalla de visualización(); línea =44; regreso; }}} if (línea ==45) {if (búsqueda1! =7) {// si está en la línea 3, asegúrese de que no esté en esos bits especiales if (bitRead (pong [47], búsqueda1) ==1) {// verifica que haya una paleta allí diry =0; // cambia la dirección y para que se dirija hacia otro tono de paleta (9.500.100); } más si (bitRead (pong [47], búsqueda1 + 1) ==1) {diry =0; dir =1; tono (9.500.100); } else {// sin paleta, se perdió el tono de la pelota (9.500.300); pantalla clara(); inicio =1; retraso (1000); scoreright (); }} if (search1 ==7) {// bit especial, debe trasladarse a la siguiente matriz if (bitRead (pong [47], 7) ==1) {// encontró una paleta allí // pong [45] =B10000000; // limpia la fila en la que estaba line =45; dir =0; // la dirección es la misma diry =0; // y la dirección cambia el tono (9.500.100); } más si (bitRead (pong [46], 0) ==1) {dir =1; diry =0; tono (9.500.100); llevar =0; } else {// sin paleta, se perdió el tono de la pelota (9.500.300); pantalla clara(); inicio =1; retraso (1000); scoreright (); }}}} búsqueda1 ++; }} if (dir ==1) {// la bola se mueve de izquierda a derecha while (search1 <8) {// encuentra el bit en el que está la bola if (bitRead (pong [line], search1) ==1) {// encontró el bit en el que está la bola if (línea ==45) {if (search1! =1 &&search1! =0) {// si está en la línea 3, asegúrese de que no esté en un bit especial if ( bitRead (pong [47], search1) ==1) {// comprueba si hay una paleta diry =0; // cambia la dirección y para que la bola se dirija hacia el otro tono de paleta (9.500.100); } más si (lectura de bits (pong [47], búsqueda1-1) ==1) {diry =0; dir =0; tono (9.500.100); if (buscar1 ==7) {llevar =1; }} else {// sin paleta, se perdió el tono de la pelota (9.500.300); pantalla clara(); inicio =1; retraso (1000); scoreright (); }} if (buscar1 ==1) {if (bitRead (pong [47], 0) ==1) {pong [43] =B00000010; dir =0; diry =0; tono (9.500.100); } else {tono (9.500.300); pantalla clara(); inicio =1; retraso (1000); scoreright (); }} if (buscar1 ==0) {if (bitRead (pong [47], 1) ==1) {pong [45] =B00000100; diry =0; dir =0; línea =45; tono (9.500.100); pantalla de visualización(); } else {tono (9.500.300); pantalla clara(); inicio =1; retraso (1000); scoreright (); }}} if (línea ==44) {if (búsqueda1! =0) {if (bitRead (pong [46], búsqueda1) ==1) {// verifica si hay una paleta diry =0; // cambia la dirección y para que la bola se dirija hacia el otro tono de paleta (9.500.100); } más si (bitRead (pong [46], búsqueda1-1) ==1) {diry =0; dir =0; tono (9.500.100); } else {// sin paleta, se perdió el tono de la pelota (9.500.300); pantalla clara(); inicio =1; retraso (1000); scoreright (); }} if (buscar1 ==0) {if (bitRead (pong [46], 0) ==1) {pong [44] =B00000001; línea =44; dir =1; diry =0; tono (9.500.100); } más si (bitRead (pong [47], 7) ==1) {dir =0; diry =0; tono (9.500.100); llevar =0; } else {tono (9.500.300); pantalla clara(); inicio =1; retraso (1000); scoreright (); }}}} búsqueda1 ++; }}} pase =1; search1 =0;} void scoreleft () {borrar pantalla (); rightscore ++; setscore (); pantalla de visualización(); if (puntaje de derechos ==5) {while (blinkx ++ <4) {borrar pantalla (); pantalla de visualización(); retraso (500); setscore (); pantalla de visualización(); retraso (500); } blinkx =0; puntaje de derechos =0; puntaje izquierdo =0; } else {retraso (2000); } pantalla limpia ();} void scoreright () {pantalla limpia (); leftscore ++; setscore (); pantalla de visualización(); if (leftscore ==5) {while (blinkx ++ <4) {borrar pantalla (); pantalla de visualización(); retraso (500); setscore (); pantalla de visualización(); retraso (500); } blinkx =0; puntaje de derechos =0; puntaje izquierdo =0; } else {retraso (2000); } clearcreen ();} void setscore () {byte setScoreLoop =0; while (setScoreLoop <=7) {if (leftscore ==0) {pong [setScoreLoop * 2] =cero [setScoreLoop]; } if (leftscore ==1) {pong [setScoreLoop * 2] =uno [setScoreLoop]; } if (leftscore ==2) {pong [setScoreLoop * 2] =dos [setScoreLoop]; } if (leftscore ==3) {pong [setScoreLoop * 2] =tres [setScoreLoop]; } if (leftscore ==4) {pong [setScoreLoop * 2] =cuatro [setScoreLoop]; } if (leftscore ==5) {pong [setScoreLoop * 2] =cinco [setScoreLoop]; } si (puntaje de derechos ==0) {pong [32+ (setScoreLoop * 2)] =cero [setScoreLoop]; } si (puntaje de derechos ==1) {pong [32+ (setScoreLoop * 2)] =uno [setScoreLoop]; } si (puntaje de derechos ==2) {pong [32+ (setScoreLoop * 2)] =dos [setScoreLoop]; } si (puntaje de derechos ==3) {pong [32+ (setScoreLoop * 2)] =tres [setScoreLoop]; } si (puntaje de derechos ==4) {pong [32+ (setScoreLoop * 2)] =cuatro [setScoreLoop]; } if (puntaje de derechos ==5) {pong [32+ (setScoreLoop * 2)] =cinco [setScoreLoop]; } setScoreLoop ++; } pong [20] =B00011000; pong [22] =B00011000; pong [24] =B00011000; }
Esquemas
Proceso de manufactura
- Juego de giroscopio Arduino con MPU-6050
- Juego Arduino Pong - Pantalla OLED
- Controlador de juego Arduino
- Controlar el aceptador de monedas con Arduino
- Juego Arduino Pong en Matrix 24x16 con MAX7219
- Arduino Nano Tetris Game en una matriz casera de 16x8
- ¡Arduino con Bluetooth para controlar un LED!
- Pixel Chaser Game
- Controlar una matriz de LED con Arduino Uno
- NeoMatrix Arduino Pong
- Medición de la radiación solar con Arduino