O jogo do Pong e o primeiro videogame com fins lucrativos. O jogo e composto de duas "raquetes" (uma para cada jogador) e o objetivo e rebater a bola, evitando o ponto do seu oponente.A imagem acima da uma ideia melhor de como o jogo funciona. A ideia deste projeto e utilizar dois potenciometros ao arduino e enviar a posicao angular do potenciometro para o computador atraves da comunicacao serial. Utilizando o processing, vamos ler a porta serial e utilizar os dados recebidos para definir a posicao das raquetes. A montagem do circuito e trivial.O codigo do arduino e igualmente simples. Vamos ler os valores das portas analogicas e passa-los atraves da comunicacao serial, no seguinte formato: os dois valores dos potenciometros separados por ";".void setup(){ Serial.begin(9600);}void loop(){ Serial.print(analogRead(A0)); Serial.print(";"); Serial.println(analogRead(A2));}Simples assim, sem nenhum misterio. Agora so precisamos fazer o codigo do processing para receber e interpretar as informacoes. Nao irei colocar muitos comentarios sobre o codigo, se alguem tiver alguma duvida, pode postar nos comentarios que eu respondo.// Importa a biblioteca de comunicacao serialimport processing.serial.*; Serial myPort; // Cria um objetofloat raio = 20; //Raio da bolaint X, Y; //Posicao X e Y da bolafloat vx=2, vy=2; // Componentes X e Y da velocidade da bolafloat vx0=vx, vy0=vy; // Velocidades iniciaisint p1=0; //Pontuacao do jogador 1 e 2int p2=0;int x1=15; // Posicao X das duas "raquetes"int x2=785;float y1=0; // Posicao Y das duas "raquetes"float y2=0;int tam=100; // tamanho da raqueteString[] vector;void setup(){ size( 800, 400 ); //tamanho da janela myPort = new Serial(this, Serial.list()[0], 9600); // Inicia a comunicacao com a porta serial 0 PFont f = createFont("SansSerif", 40, true); //Define a fonte utilizada no placar textFont(f,40); strokeWeight( 1 ); // Largura das linhas frameRate( 44 ); // Velocidade dos quadros X = width / 2; Y = (height-100) / 2; myPort.bufferUntil('\n'); //So inicia quando houver a primeira comunicacao serial.}void draw(){ background( 255 ); //Define a cor de fundo //////////////////////////////////////////////////// // Pega as informacoes recebidas pela porta // serial e atribui as posicoes X e Y das raquetes //////////////////////////////////////////////////// if(myPort.available()>1){ String inString= myPort.readString(); // Le tudo que foi obtido pela porta serial String[] teste =split(inString,"\n"); // Divide em linhas String[] vector = split(teste[teste.length-2],";"); // pega a penultima e separa num vetor y1 = float(vector[0]); y2 = float(vector[1]); y1 = map(y1, 0, 1023, 0, height-tam-100); // renormaliza pelo tamanho util da janela. y2 = map(y2, 0, 1023, 0, height-tam-100); } fill( 0, 121, 184 ); ellipse( X, Y, raio, raio ); fill(255,0,0); rect(x1,y1,-10,tam); fill(0,0,255); rect(x2,y2,10,tam); X+=vx; Y+=vy; //////////////////////////////////// // Colisao com as raquetes //////////////////////////////////// if(X < x1+raio/2 && (Y > y1 && Y < y1+tam)){ X-=vx; vx*=-1.1; } if(X > x2-raio/2 && (Y > y2 && Y < y2+tam)){ X-=vx; vx*=-1.1; } //////////////////////////////// //Fronteiras horizontais //////////////////////////////// if(X > x2-raio/2 || X < x1-raio/2){ if(X > x2-raio/2){ p1++; } if(X < x1-raio/2){ p2++; } X = width / 2; Y = (height-100) / 2; vx0=-1*vx0; vx=vx0; vy=vy0; fill( 0, 121, 184 ); ellipse( X, Y, raio, raio ); vx=vx0; vy=vy0; delay(2000); } ///////////////////////////////////////// // Fronteiras verticais //////////////////////////////////////// if(Y > height-100-raio/2 || Y <