19-1 Grupo 2

## **Resumo**

O objetivo do projeto foi fazer uma releitura do jogo Pong, para que fosse jogável com o push button duplo do Arduino.

## **Software/materiais utilizados**

* Unity
* Arduino IDE
* Arduino Genuino UNO
* 2 push buttons
* Cabo USB
* 8 cabos jumper
* 16 peças de Lego

Segue abaixo um exemplo simplificado do esquema eletrônico utilizado no Arduino:

## **Metodologia**

A ideia para o projeto partiu do princípio de integrar o Arduino com a Unity, para aplicar os conhecimentos adquiridos em aula diretamente no funcionamento de um jogo.

Foi desenvolvida uma “releitura” do jogo Pong, da Atari, que foi o primeiro videogame lucrativo da história e deu origem a um novo setor na indústria. Esta releitura foi desenvolvida na Unity, e foi utilizada a placa com dois push buttons para ser servir como o controle do jogo, sendo um dos botões para mover a barra do jogador para cima, e o outro botão para move-la para baixo.

Como era desejado fazer do Arduino um controle para algum jogo, a escolha do jogo Pong e da placa com apenas dois push buttons foi para trazer de volta a sensação de estar jogando em um vídeo-game antigo.

## **Desenvolvimento**

A fase de desenvolvimento pode ser dividida em três partes, que são:

* Jogo Pong

* Programação da Integração
* Controle

* Documentação

## **Jogo Pong**

Sendo a ideia principal do projeto fazer um controle integrado com a Unity utilizando Arduino, foi pensado em jogos clássicos com controles simples, e o que mais se encaixou com a ideia e os materiais disponíveis foi o jogo Pong, que é um jogo simples que simula um jogo de ping pong onde você controla uma barra que simbolizaria sua raquete, e joga contra outro jogador, mas na versão desse projeto, por limitação de material, foi feita uma IA simples para ser o oponente.

Foi desenvolvida uma releitura do jogo pong na Unity, contendo duas barras simbolizando as raquetes e uma bolinha simbolizando a bolinha de ping pong, o jogador controla a barra da direita utilizando push buttons do Arduino, e joga contra a outra barra que é uma IA.

## **Programação da Integração**

Para programar a integração foi utilizada uma biblioteca C# chamada System.IO.Ports, que contém classes para controlar portas seriais, sendo SerialPort a classe mais importante, pois fornece uma estrutura para E/S síncrona e orientada a eventos, acesso aos estados de fixação e interrupção e acesso às prioridades do driver serial.

Esta biblioteca foi utilizada no código da Unity para definição da Porta COM que foi utilizada, através da classe SerialPort, em seguida a porta COM é aberta para conexão com o Arduino, e se a porta responder positivamente, os comandos desejados serão executados, neste caso o push button que move a barra para cima, e o push button que move a barra para baixo.

Seguem códigos necessários para integração:

```
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO.Ports; //Biblioteca

public class Paddle : MonoBehaviour
{

    public float speed;
    bool canMoveUp, canMoveDown;
    public Ball ball;

    //Variavel para escolher o numero da porta
    static string SelectedPort = "COM5";

    //Definiçao da Porta COM que sera utilizada
    SerialPort porta = new SerialPort(SelectedPort, 9600);

    void Start() {
        //Abertura da Porta COM para conexao com o Arduino
        porta.Open ();
        porta.ReadTimeout = 1;
    }

    void Update() {

    //Caso a porta COM responda positivamente estao executaremos o metodo Move()
    if(porta.IsOpen)
        {
            try
            {
                Move(porta.ReadByte());
                print(porta.ReadByte());
            }
            catch(System.Exception)
            {

            }
        }
    }

    private void Move(int direction){

        if(transform.position.y > -3f){
            canMoveDown = true;
        }else{
            canMoveDown = false;
        }

        if(transform.position.y < 3f){
            canMoveUp = true;
        }else{
            canMoveUp = false;
        }

        if(canMoveUp && direction == 1){
            transform.Translate (speed * Vector2.up);
             if(!ball.isStarted){
                ball.LaunchBall();
            }
        }
        if(canMoveDown && direction == 2){
            transform.Translate (speed * Vector2.down);
             if(!ball.isStarted){
                ball.LaunchBall();
            }
        }
    }
}

```

Também foi necessário um código na IDE do Arduino para fazer a leitura do input dos botões e enviar para o serial, onde a unity foi capaz de ler o serial utilizando a biblioteca System.IO.Ports, segue abaixo:

```
//Definição dos pin's responsáveis pelos respectivos Push Buttons
const int botaoEsquerdo = 3;
const int botaoDireito = 4;

const int esq = 2;
const int dir =1;

void setup()
{
   Serial.begin(9600);

   pinMode(botaoEsquerdo, INPUT);
   pinMode(botaoDireito, INPUT);

   digitalWrite(botaoEsquerdo, HIGH);
   digitalWrite(botaoDireito, HIGH);
}

//Método de Leitura Constante do Estado dos Push Butons
void loop()
{
   if(digitalRead(botaoEsquerdo) == LOW)
   {
      //Serial.print("LEFT");
      Serial.write(1);
      Serial.flush();
      delay(5);
   }
   if(digitalRead(botaoDireito) == LOW)
   {
      //Serial.print("RIGHT");
      Serial.write(2);
      Serial.flush();
      delay(5);
   }
}
```

## **Controle**

A placa com dois push buttons disponível é de tamanho pequeno, o que a torna não muito confortável para ser manuseada como um controle de um jogo, pensando nisso, foi montada uma espécie de capa para essa placa, para que se tornasse mais confortável de manusear e se parecesse mais com um controle, para a montagem dessa capa foram utilizadas peças de Lego:

## **Documentação**

A documentação foi parte essencial do desenvolvimento do projeto, pois tornou possível detalhar todo o projeto e ter controle do que foi feito, para uma melhor avaliação do processo como um todo, além de fornecer a oportunidade do aperfeiçoamento no que se refere a ferramentas e técnicas de gestão de projetos.

## **Resultados**

O projeto obteve os resultados desejados, surgiram alguns problemas na parte eletrônica, com a conexão dos cabos jumper, mas foram problemas simples que com algumas pesquisas foram facilmente solucionados.

Foi testado se o controle estava desempenhando um bom resultado na jogabilidade do jogo, e os resultados foram positivos, foi possível replicar utilizando a Unity e um Arduino, o primeiro jogo lucrativo da história, um jogo simples, com controles simples mas que ainda sim garante um momento de diversão.

## **Conclusão**

O projeto foi concluído com sucesso e foi de muito aproveitamento. Os push buttons funcionaram muito bem como controle para um jogo, sendo possível observar que pode-se ter um momento de diversão com um jogo digital utilizando ferramentas simples, mas também que o Arduino tem grande potencial para que sejam desenvolvidos controles avançados para todos os tipos de jogos.

Como aprimoramento, o projeto pode ser melhorado utilizando mais uma placa com dois push buttons e integrando a Unity como um Jogador 2, para que o jogador possa jogar contra outro, ao invés da IA.

O conhecimento adquirido no projeto fez com que se pudesse ter uma ideia de como os controles de videogames são feitos, do que são compostos e do que são capazes. A integração do Arduino com a Unity também fez com que os horizontes sobre as possibilidades na criação de jogos fossem expandidos, pois foi uma primeira oportunidade de integrar um jogo com um controle escolhido e montado por você mesmo, o qual é possível fazer alterações e adicionar funções se desejado.

O projeto também serviu para mostrar que é possível desenvolver diversas aplicações utilizando Arduino, em diferentes áreas da indústria, e que isso pode tanto trazer diversão a vida das pessoa quanto facilitar ou trazer melhorias.