Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Jogo Arduino Pong em Matriz 24x16 com MAX7219

Componentes e suprimentos

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

Ferramentas e máquinas necessárias

Ferro de soldar (genérico)

Aplicativos e serviços online

Arduino IDE

Sobre este projeto




Eu construí este pequeno console de pong em uma matriz de 6 unidades. Matrizes 8x8 LED de acordo com as instruções e código de:https://www.instructables.com/id/Pong/

Em vez de placas matriciais personalizadas, comprei módulos 8x8 baratos prontos para uso com MAX7219 da Aliexpress.

Os pinos de "clock" e "load" de cada placa são conectados juntos. O pino "Din" da primeira matriz vai para o Arduino, e "Dout" para "Din" da próxima matriz, etc. As pás de controle são dois potenciômetros de 10k conectados aos pinos analógicos A0 e A1 do Arduino e a campainha é conectada ao pino D9.

No final coloquei o aparelho em uma caixa plástica e os controladores em caixas para instalação elétrica.

Você pode baixar a biblioteca LedControl em:

https://github.com/wayoda/LedControl

Código

  • código
código Arduino
 // Sempre devemos incluir a biblioteca #include "LedControl.h" byte rightscore; byte leftscore; int toneloop =1000; byte pongdisplay [] ={// Usado na inicialização para exibir "Pong" B11111111, B00000000, B00001001, B00000000, B00001001, B00000000, B00000110, B00000000, B00000000, B00000000, B00000000, B00000000, B01110000, B00000000, B00000000, B00001001, B00000000, B00000110, B00000000, B00000000, B00000000, B00000000, B00000000, B01110000, B00000000, B0000000010001000, B000000001000, B000000001000, B000000001000 , B00000000, B01110000, B00000000, B00000000, B00000000, B00000000, B00000000, B11110000, B00000000, B00001000, B00000000, B00001000, B00000000, B11110000, B00000000, B00000000, B00000000, B00000000, B00000000, B1100110000, B00000000, B00001000, B00000000, B00001000, B00000000, B11110000, B00000000, B00000000, B00000000, B00000000, B00000000, B110011110000, B00000000 B00001000, B000010001 , B11111111, B00000000, B00000000, B00000000, B00000000, B00000000,}; byte zero [] ={// Usado para exibir um '0' ao exibir a pontuação B00000000, B00000000, B00111100, B01000010, B01000010, B01000010, B00111100, B00000000}; byte um [] ={// Usado para exibir um '1' ao exibir a pontuação B00000000, B00000000, B10001000, B10000100, B11111110, B10000000, B10000000, B00000000}; byte dois [] ={// Usado para exibir um '2' ao exibir a pontuação B00000000, B01100010, B01010001, B01010001, B01001001, B01000110, B00000000, B00000000}; byte três [] ={// Usado para exibir um ' 3 'para ao exibir a pontuação B00000000, B00100110, B01000001, B01001001, B00110110, B00000000, B00000000, B00000000}; byte quatro [] ={// Usado para exibir um' 4 'para ao exibir a pontuação B00000000, B00000000, B00001111, B00001000, B00001000, B11111111, B00000000, B00000000}; byte cinco [] ={// Usado para exibir um '5' ao exibir a pontuação B00000000, B00000000, B10011110, B10010010, B10010010, B11110010, B00000000, B00000000}; byte displayevens =0; byte displayrow =0; byte displayindex =0; byte displayodds =1; tempo longo sem sinal; tempo atual longo sem sinal; / * Agora precisamos de um LedControl para trabalhar. o pino 12 está conectado ao DataIn o pino 11 está conectado ao CLK O pino 10 está conectado ao LOAD Temos 6 MAX72XX. * / modo de byte; desvio de byte; transporte de byte; linha interna; LedControl lc =LedControl (12,11,10,6); número rand longo; dir byte; pos iniciais int; linha de byte; coluna de byte; randNumber longo; início de byte; byte diry; int pass; limite de byte; #define leftpaddle 0 // botão esquerdo do pong está conectado à entrada analógica 0 # define rightpaddle 1 // botão direito pong está conectado ao analógico intput 1int directionpong; int rightpongval; int leftpongval; byte blinkx; byte pong [] ={// Armazena a posição da bola e remos 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, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, , B00000000, B00000000, B00000000, B00000000, B00000000}; void setup () {pinMode (leftpaddle, INPUT); // a raquete é uma entrada. pinMode (rightpaddle, INPUT); // a raquete é uma entrada. Serial.begin (9600); // comunicação serial para depuração. Definido como 9600 baud // Estas instruções abaixo seguem e configuram as matrizes para as configurações fornecidas 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 (displayevens <5) {while (displayrow <=7) {lc.setRow (displayevens, displayrow, pongdisplay [displayindex]); displayrow ++; displayindex + =2; } displayrow =0; displayevens + =2; } displayrow =0; displayindex =1; randomSeed (analogRead (4)); início =1; tempo =milis (); hora atual =milis (); while (currenttime-time <3000) {leftpongval =analogRead (leftpaddle); leftpongval =map (leftpongval, 1023,20,2,0); if (leftpongval ==0) {lc.setLed (3,2,7, verdadeiro); lc.setLed (3,3,7, falso); lc.setLed (3,4,7, falso); modo =1; limite =2; } if (leftpongval ==1) {lc.setLed (3,2,7, verdadeiro); lc.setLed (3,3,7, verdadeiro); lc.setLed (3,4,7, falso); modo =2; limite =1; } if (leftpongval ==2) {lc.setLed (3,2,7, verdadeiro); lc.setLed (3,3,7, verdadeiro); lc.setLed (3,4,7, verdadeiro); modo =3; limite =2; } atraso (50); lc.clearDisplay (3); hora atual =milis (); }} void loop () {remos (); pongsim (); tela de exibição(); } void paddles () {// lê os dados das pás e os exibe no array int searchbit; transportar int =0; // Serial.print ("LeftPaddle:"); // Serial.println (analogRead (leftpaddle)); leftpongval =analogRead (leftpaddle); leftpongval =map (leftpongval, 0,1010,0,13); rightpongval =analogRead (rightpaddle); rightpongval =map (rightpongval, 1023,20,0,13); // Serial.print ("RightPaddle:"); // Serial.println (rightpongval); // limpa a raquete anterior para exibir a próxima pong [0] =B00000000; pong [1] =B00000000; pong [46] =B00000000; pong [47] =B00000000; // ------------------------------- remo direito 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); carregar =1; }} if (mode! =2) {if (carry ==0) {if (rightpongval-2> =0) {bitSet (pong [46], rightpongval-2); } else {bitSet (pong [47], 7); carregar =1; }}}} if (rightpongval> 7) {rightpongval =map (rightpongval, 8,13,7, limit); 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]); } // ---------------------------------- left paddle 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); } else {bitSet (pong [1], 7); if (modo! =2) {bitSet (pong [1], 6); carregar =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, limit); bitSet (pong [1], leftpongval); bitSet (pong [1], leftpongval-1); if (modo! =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) {// Iniciando um novo jogo randnumber =random (1,7); // Obtenha um bit inicial aleatório dir =random (2); // Crie um movimento aleatório da esquerda para a direita ou da direita para a esquerda diry =random (2); // Crie uma direção de movimento y inicial aleatória if (diry ==0) {// Se a direção de y for 0. Movimento da linha inferior para a linha superior =random (30,34); // Crie uma linha inicial aleatória entre 30-34 bitSet (pong [line], randnumber); // Defina o bit na linha aleatória e o bit aleatório igual a 1 na matriz de pong} if (diry ==1) {// Se a direção y for 1. Movimento da linha superior para a linha inferior =aleatório (12,16); // Crie uma linha inicial aleatória entre 12-16 bitSet (pong [line], randnumber); // Defina o bit na linha aleatória e o bit aleatório igual a 1 no array pong} start =0; // Defina a varaible inicial igual a 0} if (diry ==0) {// Se a bola está se movendo de baixo para cima if (dir ==0) {// Se a bola está se movendo da direita para a esquerda se (deflect ==0 &&carry ==0) {// Se a bola não está desviando ou sendo transportada para outra linha de matriz- =2; // Avance a bola para o outro lado subtraindo 2 da linha pong [linha] =pong [linha + 2] <<1; // Mova a bola para a esquerda e defina-a igual à nova linha pong [linha + 2] =B00000000; // Limpe a linha antiga da bola} if (carry ==1) {// Se a bola tiver que ser transportada para uma nova matriz line- =3; // Avança a bola em direção ao outro lado subtraindo 3 da linha pong [line] =B00000001; // Defina a nova linha pong [line + 3] =B00000000; // Limpe a linha antiga da bola carry =0; // Defina a variável de transporte de volta para 0 return; // Terminamos aqui} if (deflect ==1) {// Se a bola tiver que desviar da parede line- =2; // Avança a bola em direção ao outro lado subtraindo 2 da linha pong [line] =B01000000; // Defina a nova linha pong [line + 2] =B00000000; // Limpe a linha antiga da bola deflect =0; // Defina a variável de deflexão de volta para 0 dir =1; // Muda a direção da esquerda para a direita return; // Terminamos aqui} if (bitRead (pong [line], 7) ==1) {// Se a bola estiver no 7º bit da linha if (line ==3 || line ==5 || linha ==7 || linha ==9 || linha ==11 || linha ==13 || linha ==15 || // Se a linha for uma linha ímpar linha ==17 || linha ==19 | | linha ==21 || linha ==23 || linha ==25 || linha ==27 || linha ==29 || linha ==31 || linha ==33 || linha ==35 || linha ==37 || linha ==39 || linha ==41 || linha ==43 || linha ==45) {transportar =1; // A bola precisa ser transportada para outro retorno de matriz; // Terminamos aqui} else {// Caso contrário, a bola está em uma linha par if (line! =2) {// A linha não pode ser 2 porque a bola encontra a raquete em 2 deflect =1; // A bola precisa desviar do retorno da parede; // Terminamos aqui}}}} // Os comentários acima devem explicar todas as coisas abaixo. Algumas coisas, parâmetros diferentes. if (dir ==1) {if (deflect ==0 &&carry ==0) {line- =2; pong [linha] =pong [linha + 2]>> 1; pong [linha + 2] =B00000000; } if (carry ==1) {line--; pong [linha] =B10000000; pong [linha + 1] =B00000000; transportar =0; Retorna; } if (deflect ==1) {line- =2; pong [linha] =B00000010; pong [linha + 2] =B0000000; deflexão =0; dir =0; Retorna; } if (bitRead (pong [linha], 0) ==1) {if (linha ==2 || linha ==4 || linha ==6 || linha ==8 || linha ==10 || linha ==12 || linha ==14 || linha ==16 || linha ==18 || linha ==20 || linha ==22 || linha ==24 || linha ==26 || linha ==28 || linha ==30 || linha ==32 || linha ==34 || linha ==36 || linha ==38 || linha ==40 || linha ==42 || linha ==44) {carregar =1; Retorna; } else {if (line! =3) {deflect =1; Retorna; }}}}} // ------------------------------------------- -diry =1 abaixo if (diry ==1) {if (dir ==0) {if (deflect ==0 &&carry ==0) {line + =2; pong [linha] =pong [linha-2] <<1; pong [linha-2] =B00000000; } if (transportar ==1) {linha + =1; pong [linha] =B00000001; pong [linha-1] =B00000000; transportar =0; Retorna; } if (deflect ==1) {line + =2; pong [linha] =B01000000; pong [linha-2] =B00000000; deflexão =0; dir =1; Retorna; } if (bitRead (pong [linha], 7) ==1) {if (linha ==5 || linha ==7 || linha ==9 || linha ==11 || linha ==13 || linha ==15 || linha ==17 || linha ==19 || linha ==21 || linha ==23 || linha ==25 || linha ==27 || linha ==29 || linha ==31 || linha ==33 || linha ==35 || linha ==37 || linha ==39 || linha ==41 || linha ==43 || linha ==45) {transportar =1; Retorna; } else {if (line! =44) {deflect =1; Retorna; }}}} if (dir ==1) {if (deflect ==0 &&carry ==0) {line + =2; pong [linha] =pong [linha-2]>> 1; pong [linha-2] =B00000000; } se (transportar ==1) {linha + =3; pong [linha] =B10000000; pong [linha-3] =B00000000; transportar =0; Retorna; } if (deflect ==1) {line + =2; pong [linha] =B00000010; pong [linha-2] =B0000000; deflexão =0; dir =0; Retorna; } if (bitRead (pong [linha], 0) ==1) {if (linha ==2 || linha ==4 || linha ==6 || linha ==8 || linha ==10 || linha ==12 || linha ==14 || linha ==16 || linha ==18 || linha ==20 || linha ==22 || linha ==24 || linha ==26 || linha ==28 || linha ==30 || linha ==32 || linha ==34 || linha ==36 || linha ==38 || linha ==40 || linha ==42 || linha ==44) {carregar =1; Retorna; } else {if (line! =45) {deflect =1; Retorna; }}}}}} void displayscreen () {displayevens =0; displayrow =0; displayindex =0; displayodds =1; while (displayevens <5) {while (displayrow <=7) {lc.setRow (displayevens, displayrow, pong [displayindex]); displayrow ++; displayindex + =2; } displayrow =0; displayevens + =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 clearscreen () {int clearing =0; while (limpar <49) {pong [limpar] =B00000000; clearing ++; }} void ball_meets_paddle () {byte search1 =0; if (diry ==0) {// bola movendo-se para cima if (dir ==0) {// bola movendo-se da direita para a esquerda enquanto (search1 <8) {// encontre o bit em que a bola está if (bitRead (pong [line], search1) ==1) {// encontrou a parte em que a bola está if (line ==2) {if (search1! =6 &&search1! =7) {// se está na linha 2, faça certifique-se de que não está nesses bits especiais if (bitRead (pong [0], search1) ==1) {// verifique se há uma raquete ali diry =1; // muda a direção y de forma que vá em direção a outro tom de remo (9,500,100); } else if (bitRead (pong [0], search1 + 1) ==1) {diry =1; dir =1; tom (9.500.100); if (search1 ==0) {carry =1; }} else {// sem raquete, errou o tom da bola (9.500.300); limpar tela(); início =1; atraso (1000); scoreleft (); }} if (search1 ==6) {// bit especial, precisa desviar o mesmo caminho que vem if (bitRead (pong [0], 7) ==1) {// há uma raquete lá, pong [2] =B01000000; dir =1; diry =1; tom (9.500.100); } else {// perdi, sem remo. tom (9.500.300); limpar tela(); início =1; atraso (1000); scoreleft (); }} if (search1 ==7) {// bit especial, precisa ricochetear primeiro na parede if (bitRead (pong [0], 6) ==1) {// encontrou o remo pong [2] =B00100000; diry =1; dir =1; linha =2; tom (9.500.100); tela de exibição(); } else {// perdi, sem remo. tom (9.500.300); limpar tela(); início =1; atraso (1000); scoreleft (); }}} if (line ==3) {if (search1! =7) {// se estiver na linha 3, certifique-se de que não está nesses bits especiais if (bitRead (pong [1], search1) ==1) {// verifique se há uma raquete ali diry =1; // muda a direção y de forma que vá em direção a outro tom de remo (9,500,100); } else if (bitRead (pong [1], search1 + 1) ==1) {diry =1; dir =1; tom (9.500.100); } else {// sem raquete, errou o tom da bola (9.500.300); limpar tela(); início =1; atraso (1000); scoreleft (); }} if (search1 ==7) {// bit especial, precisa ser transportado para a próxima matriz if (bitRead (pong [1], 7) ==1) {// encontrou uma raquete lá // pong [2] =B10000000; // limpe a linha em que estava dir =0; // direção é a mesma diry =1; // a direção y muda o tom (9,500,100); } else if (bitRead (pong [0], 0) ==1) {dir =1; diry =1; tom (9.500.100); transportar =0; } else {// sem raquete, errou o tom da bola (9.500.300); limpar tela(); início =1; atraso (1000); scoreleft (); }}}} search1 ++; }} if (dir ==1) {// a bola está se movendo da esquerda para a direita enquanto (search1 <8) {// encontre a parte em que a bola está if (bitRead (pong [line], search1) ==1) {// encontrou o bit em que a bola está if (line ==3) {if (search1! =1 &&search1! =0) {// se estiver na linha 3, certifique-se de que não está em um bit especial if ( bitRead (pong [1], search1) ==1) {// verifique se existe uma raquete diry =1; // muda a direção y para que a bola vá em direção ao outro tom da raquete (9,500,100); } else if (bitRead (pong [1], search1-1) ==1) {diry =1; dir =0; tom (9.500.100); if (search1 ==7) {carry =1; }} else {// sem raquete, errou o tom da bola (9.500.300); limpar tela(); início =1; atraso (1000); scoreleft (); }} if (search1 ==1) {if (bitRead (pong [1], 0) ==1) {pong [3] =B00000010; dir =0; diry =1; tom (9.500.100); } else {tom (9.500.300); limpar tela(); início =1; atraso (1000); scoreleft (); }} if (search1 ==0) {if (bitRead (pong [1], 0) ==1) {pong [3] =B00000100; diry =1; dir =0; linha =3; tom (9.500.100); tela de exibição(); } else {tom (9.500.300); limpar tela(); início =1; atraso (1000); scoreleft (); }}} if (line ==2) {if (search1! =0) {if (bitRead (pong [0], search1) ==1) {// verifique se existe uma raquete diry =1; // muda a direção y para que a bola vá em direção ao outro tom da raquete (9,500,100); } else if (bitRead (pong [0], search1-1) ==1) {diry =1; dir =0; tom (9.500.100); } else {// sem raquete, errou o tom da bola (9.500.300); limpar tela(); início =1; atraso (1000); scoreleft (); }} if (search1 ==0) {if (bitRead (pong [0], 0) ==1) {// pong [2] =B00000001; linha =2; dir =1; diry =1; tom (9.500.100); Retorna; } else if (bitRead (pong [1], 7) ==1) {diry =1; dir =0; tom (9.500.100); transportar =0; } else {tom (9.500.300); limpar tela(); início =1; atraso (1000); scoreleft (); }}}} search1 ++; }}} // --------------------------------------------- ------------------------- if (diry ==1) {// bola se movendo para cima if (dir ==0) {// bola se movendo da direita para a esquerda while (search1 <8) {// encontre o bit em que a bola está if (bitRead (pong [line], search1) ==1) {// encontrou o bit em que a bola está if (line ==44) {if (search1! =6 &&search1! =7) {// se estiver na linha 2, certifique-se de que não está nesses bits especiais if (bitRead (pong [46], search1) ==1) {// verifique se há uma raquete diry =0; // muda a direção y de forma que vá em direção a outro tom de remo (9,500,100); } else if (bitRead (pong [46], search1 + 1) ==1) {diry =0; dir =1; tom (9.500.100); if (search1 ==0) {carry =1; }} else {// sem raquete, errou o tom da bola (9.500.300); limpar tela(); início =1; atraso (1000); pontuação (); }} if (search1 ==6) {// bit especial, precisa desviar o mesmo caminho que vem if (bitRead (pong [46], 7) ==1) {// há uma raquete lá dir =1; diry =0; tom (9.500.100); } else {// perdi, sem remo. tom (9.500.300); limpar tela(); início =1; atraso (1000); pontuação (); }} if (search1 ==7) {// bit especial, precisa ricochetear primeiro na parede if (bitRead (pong [46], 6) ==1) {// encontrou o paddle pong [44] =B00100000; diry =0; dir =1; tom (9.500.100); tela de exibição(); linha =44; Retorna; }}} if (line ==45) {if (search1! =7) {// se estiver na linha 3, certifique-se de que não está nesses bits especiais if (bitRead (pong [47], search1) ==1) {// verifique se há uma raquete ali diry =0; // muda a direção y de forma que vá em direção a outro tom de remo (9,500,100); } else if (bitRead (pong [47], search1 + 1) ==1) {diry =0; dir =1; tom (9.500.100); } else {// sem raquete, errou o tom da bola (9.500.300); limpar tela(); início =1; atraso (1000); pontuação (); }} if (search1 ==7) {// bit especial, precisa ser transportado para a próxima matriz if (bitRead (pong [47], 7) ==1) {// encontrou uma raquete lá // pong [45] =B10000000; // limpar a linha que estava na linha =45; dir =0; // direção é a mesma diry =0; // a direção y muda o tom (9,500,100); } else if (bitRead (pong [46], 0) ==1) {dir =1; diry =0; tom (9.500.100); transportar =0; } else {// sem raquete, errou o tom da bola (9.500.300); limpar tela(); início =1; atraso (1000); pontuação (); }}}} search1 ++; }} if (dir ==1) {// a bola está se movendo da esquerda para a direita enquanto (search1 <8) {// encontre a parte em que a bola está if (bitRead (pong [line], search1) ==1) {// encontrou o bit em que a bola está if (line ==45) {if (search1! =1 &&search1! =0) {// se estiver na linha 3, certifique-se de que não está em um bit especial if ( bitRead (pong [47], search1) ==1) {// verifique se existe uma raquete diry =0; // muda a direção y para que a bola vá em direção ao outro tom da raquete (9,500,100); } else if (bitRead (pong [47], search1-1) ==1) {diry =0; dir =0; tom (9.500.100); if (search1 ==7) {carry =1; }} else {// sem raquete, errou o tom da bola (9.500.300); limpar tela(); início =1; atraso (1000); pontuação (); }} if (search1 ==1) {if (bitRead (pong [47], 0) ==1) {pong [43] =B00000010; dir =0; diry =0; tom (9.500.100); } else {tom (9.500.300); limpar tela(); início =1; atraso (1000); pontuação (); }} if (search1 ==0) {if (bitRead (pong [47], 1) ==1) {pong [45] =B00000100; diry =0; dir =0; linha =45; tom (9.500.100); tela de exibição(); } else {tom (9.500.300); limpar tela(); início =1; atraso (1000); pontuação (); }}} if (line ==44) {if (search1! =0) {if (bitRead (pong [46], search1) ==1) {// verifique se existe uma raquete diry =0; // muda a direção y para que a bola vá em direção ao outro tom da raquete (9,500,100); } else if (bitRead (pong [46], search1-1) ==1) {diry =0; dir =0; tom (9.500.100); } else {// sem raquete, errou o tom da bola (9.500.300); limpar tela(); início =1; atraso (1000); pontuação (); }} if (search1 ==0) {if (bitRead (pong [46], 0) ==1) {pong [44] =B00000001; linha =44; dir =1; diry =0; tom (9.500.100); } else if (bitRead (pong [47], 7) ==1) {dir =0; diry =0; tom (9.500.100); transportar =0; } else {tom (9.500.300); limpar tela(); início =1; atraso (1000); pontuação (); }}}} search1 ++; }}} passagem =1; search1 =0;} void scoreleft () {clearscreen (); rightscore ++; setscore (); tela de exibição(); if (rightscore ==5) {while (blinkx ++ <4) {clearscreen (); tela de exibição(); atraso (500); setscore (); tela de exibição(); atraso (500); } blinkx =0; rightscore =0; leftscore =0; } else {delay (2000); } clearscreen ();} void scoreright () {clearscreen (); leftscore ++; setscore (); tela de exibição(); if (leftscore ==5) {while (blinkx ++ <4) {clearscreen (); tela de exibição(); atraso (500); setscore (); tela de exibição(); atraso (500); } blinkx =0; rightscore =0; leftscore =0; } else {delay (2000); } clearscreen ();} void setscore () {byte setScoreLoop =0; while (setScoreLoop <=7) {if (leftscore ==0) {pong [setScoreLoop * 2] =zero [setScoreLoop]; } if (leftscore ==1) {pong [setScoreLoop * 2] =um [setScoreLoop]; } if (leftscore ==2) {pong [setScoreLoop * 2] =two [setScoreLoop]; } if (leftscore ==3) {pong [setScoreLoop * 2] =três [setScoreLoop]; } if (leftscore ==4) {pong [setScoreLoop * 2] =quatro [setScoreLoop]; } if (leftscore ==5) {pong [setScoreLoop * 2] =cinco [setScoreLoop]; } if (rightscore ==0) {pong [32+ (setScoreLoop * 2)] =zero [setScoreLoop]; } if (rightscore ==1) {pong [32+ (setScoreLoop * 2)] =um [setScoreLoop]; } if (rightscore ==2) {pong [32+ (setScoreLoop * 2)] =two [setScoreLoop]; } if (rightscore ==3) {pong [32+ (setScoreLoop * 2)] =três [setScoreLoop]; } if (rightscore ==4) {pong [32+ (setScoreLoop * 2)] =quatro [setScoreLoop]; } if (rightscore ==5) {pong [32+ (setScoreLoop * 2)] =cinco [setScoreLoop]; } setScoreLoop ++; } pong [20] =B00011000; pong [22] =B00011000; pong [24] =B00011000; } 

Esquemas


Processo de manufatura

  1. Jogo Arduino Gyroscope com MPU-6050
  2. Jogo Arduino Pong - Tela OLED
  3. Controlador de jogo Arduino
  4. Aceitar moeda de controle com Arduino
  5. Jogo Arduino Pong em Matriz 24x16 com MAX7219
  6. Jogo Arduino Nano Tetris em Matriz 16x8 caseira
  7. Arduino com Bluetooth para controlar um LED!
  8. Jogo Pixel Chaser
  9. Controlando uma matriz de LED com Arduino Uno
  10. NeoMatrix Arduino Pong