Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Juego Arduino Pong en Matrix 24x16 con MAX7219

Componentes y suministros

Arduino Nano R3
× 1
Módulo martrix Led 8x8 con MAX7219
× 6
Potenciómetro giratorio (genérico)
× 2
Buzzer
× 1

Herramientas y máquinas necesarias

Soldador (genérico)

Aplicaciones y servicios en línea

Arduino IDE

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

  1. Juego de giroscopio Arduino con MPU-6050
  2. Juego Arduino Pong - Pantalla OLED
  3. Controlador de juego Arduino
  4. Controlar el aceptador de monedas con Arduino
  5. Juego Arduino Pong en Matrix 24x16 con MAX7219
  6. Arduino Nano Tetris Game en una matriz casera de 16x8
  7. ¡Arduino con Bluetooth para controlar un LED!
  8. Pixel Chaser Game
  9. Controlar una matriz de LED con Arduino Uno
  10. NeoMatrix Arduino Pong
  11. Medición de la radiación solar con Arduino