# Controle Arcade (Arcade Stick)

## 1. Identificação do Grupo

|     Nome Completo     |  Matrícula  |
| :-------------------- | :---------- |
| Felipe Nunes de Mello | [202023627]
| Gabriel Saraiva Canabrava | [202045769]
| Eduardo Ferreira de Aquino | [211030710]
| Taynara Gabrielle Vitorino | [211030264]


## 2. Descrição do Produto Selecionado: Controle Arcade (Arcade Stick)

O produto selecionado é um **Controle Arcade** (ou *Arcade Stick*), um periférico de entrada projetado para simular o painel de controle das tradicionais máquinas de fliperama. O modelo proposto possui um joystick direcional e 11 botões de ação.

### Funções Principais, Público-Alvo e Contexto de Uso

* **Funções Principais:**
    * **Direção:** Movimentação em 8 eixos (cima, baixo, esquerda, direita e diagonais) via joystick.
    * **Ação:** Acionamento de comandos instantâneos de jogo através dos 11 botões mecânicos.
    * **Comunicação:** Transmissão dos comandos (inputs) para o PC ou console com o menor atraso (input lag) possível.
* **Público-Alvo:** Jogadores de jogos de luta (*Fighting Games*), entusiastas de jogos retrô (emuladores), jogadores competitivos e hobbistas de fliperamas (projetos *MAME* ou *RetroPie*).
* **Contexto de Uso:** Lazer em casa, competições de e-sports, montagem de gabinetes de fliperama customizados.

### Componentes e Sensores Utilizados

Um Controle Arcade é essencialmente um arranjo de interruptores mecânicos e uma placa controladora de entradas.

| Módulo/Componente | Função Principal | Tipo de Componente |
| :--- | :--- | :--- |
| **Joystick (Manche)** | Detectar o movimento direcional. | 4 Microswitches mecânicos (Digital). |
| **Botões de Ação** | Detectar o acionamento dos comandos pelo usuário. | 11 Microswitches/Chaves tácteis de ação rápida (ex: padrão Sanwa). |
| **Placa Controladora (Encoder)** | Ler o estado das chaves e enviar o sinal para o PC/Console. | Microcontrolador (MCU) com suporte a USB HID. |
| **Cabeamento** | Interligar os microswitches à placa controladora. | Fios com terminais *Faston* (Daisy chain para o aterramento). |

### Tecnologias de Comunicação e Controle Embarcadas

* **Comunicação:** Tradicionalmente, utilizam a interface **USB** através do protocolo **USB HID** (Human Interface Device) ou **XInput/DirectInput**, garantindo baixa latência (polling rate de até 1000Hz, ou 1ms).
* **Controle Embarcado:** O microcontrolador (MCU) da placa é responsável por:
    1. Fazer o *polling* contínuo (leitura) dos pinos de entrada (GPIOs) onde os botões estão conectados.
    2. Aplicar algoritmos de *Debounce* para evitar que um único toque mecânico seja registrado como múltiplos cliques devido à vibração dos contatos.
    3. Empacotar o estado dos botões em relatórios (Reports) e enviar rapidamente pela interface de comunicação.

---

## 3. Análise Técnica do Funcionamento

### Principais Módulos do Sistema

1.  **Módulo de Interface Física:** Consiste no manche e nos botões. São mecanismos puramente elétricos (chaves normalmente abertas - NO). Quando pressionados, fecham o circuito (geralmente conectando o pino ao GND).
2.  **Módulo de Controle (MCU):** É a placa principal que contém o firmware. Lê os estados elétricos (Alto/Baixo) e os traduz para o protocolo do host.
3.  **Módulo de Conectividade:** Porta USB responsável pelo envio do pacote HID com o estado de todos os botões e eixos para o dispositivo hospedeiro.

### Identificação de Tecnologias Críticas

* **Debouncing de Sinais:** Quando um contato mecânico é fechado, ele vibra microscopicamente, gerando ruído elétrico que o microcontrolador pode interpretar como múltiplos pressionamentos. A técnica de *debounce* (via hardware com capacitores ou via software com temporizadores) é uma tecnologia crítica para a precisão em jogos.
* **Protocolos USB HID:** A padronização da comunicação é essencial. A capacidade do microcontrolador de se identificar corretamente como um "Gamepad" sem necessidade de instalação de drivers adicionais (Plug and Play) é um pilar vital da tecnologia embarcada neste dispositivo.
* **Latência de Polling (Input Lag):** Em jogos competitivos, atrasos acima de 10 a 15 milissegundos podem prejudicar seriamente a experiência. O MCU deve usar interrupções ou *polling* de altíssima frequência para ler os pinos.

---

## 4. Proposta de Reprodução com ESP32

A ESP32 é uma excelente plataforma para construir um Controle Arcade customizado (também chamado de *Fightstick*), devido ao seu grande número de GPIOs e flexibilidade.

### Descrição Conceitual da Implementação com ESP32

A proposta consiste em utilizar a ESP32 como o "cérebro" do controle (agindo como o Encoder).

* **Microcontrolador:** Uma **ESP32 DevKit** será utilizada. Mapearemos 15 pinos digitais (GPIOs) configurados como entradas com resistores de elevação internos ativados (`INPUT_PULLUP`).
* **Sensores/Atuadores:**
    * O Joystick digital (Cima, Baixo, Esquerda, Direita) será conectado diretamente a 4 GPIOs.
    * Os 11 botões de ação serão conectados a 11 GPIOs distintos.
    * O terminal terra comum de todos os botões e direções será interligado via *daisy chain* (corrente) e conectado a um único pino GND da ESP32.
* **Comunicação:** O software será desenvolvido em C++ utilizando bibliotecas apropriadas para comunicação USB HID, permitindo que a placa transmita seu estado e seja reconhecida como um controle padrão.

### Diagrama Conceitual do Sistema

O fluxo lógico ocorre da seguinte forma (unidirecional):

```text
[Usuário] --> Aperta Botão/Manche 
          --> [Microswitch fecha o contato com GND] 
          --> [GPIO da ESP32 registra nível LOW] 
          --> [Algoritmo de Debounce processa no Firmware] 
          --> [Criação do pacote (Report) HID de Gamepad] 
          --> [Transmissão via USB] 
          --> [PC/Console recebe e executa a ação no jogo]
```

### Limitações e Desafios Esperados

| Categoria | Limitação/Desafio | Solução Sugerida/Mitigação |
| :--- | :--- | :--- |
| **Latência (Input Lag)** | O uso de microcontroladores sem USB nativo e a adaptação do protocolo podem introduzir latência. | Para um nível estritamente competitivo, é recomendado o uso de uma **ESP32-S2** ou **ESP32-S3**, que contam com suporte USB OTG nativo para funcionamento a cabo com latência de 1ms. |
| **Debounce e Ruído** | O ruído das chaves mecânicas ao serem "espancadas" durante o jogo pode gerar múltiplos cliques. | Implementar um filtro de *debounce* robusto via código de aproximadamente 5 a 10 milissegundos. |
| **Pinos Especiais** | A ESP32 possui pinos restritos que podem interferir no boot se acionados acidentalmente (ex: GPIOs de *strapping*) ou que funcionam apenas como entrada (34 a 39). | Planejar cuidadosamente a alocação dos 15 botões, utilizando apenas GPIOs totalmente seguros (ex: 12-19, 21-23, 25-27, 32-33). |

---

## 5. Pesquisa Bibliográfica e Tecnológica

### Artigos Científicos sobre Tecnologias Críticas (3 Artigos)

| Tema Principal | Resumo e Contribuição para o Produto | Link de Referência |
| :--- | :--- | :--- |
| **Interface Humano-Computador (USB HID)** | Detalha os pormenores da implementação do protocolo USB HID baseada em microcontroladores. É importante para compreender os mecanismos de comunicação USB, base sobre a qual o PC recebe as interações do jogador. | [Design of USB HID device](https://ieeexplore.ieee.org/document/5558197) |
| **Debouncing de Chaves Mecânicas** | Uma extensa análise experimental sobre o ruído gerado por fechamentos de chaves mecânicas, comparando soluções em hardware e software. Esta técnica é crítica na programação do firmware do Arcade Stick para evitar o acionamento de comandos fantasmas. | [A Guide to Debouncing](http://www.ganssle.com/debouncing.htm) |
| **Processamento de Inputs em Tempo Real** | O artigo explora a arquitetura e otimização de sistemas de processamento de entradas focados em alta reatividade. Contribui para decisões de implementação (como o uso de *polling* veloz vs interrupções de hardware) para otimizar os ciclos da ESP32. | [Real-Time Input Processing for HCI](https://ieeexplore.ieee.org/abstract/document/601138) |

### Artigos Científicos sobre Aplicação/Uso do Produto (4 Artigos)

| Tema Principal | Resumo e Contribuição para o Produto | Link de Referência |
| :--- | :--- | :--- |
| **Impacto do Input Lag na Performance** | O estudo prova cientificamente que diferenças de poucos milissegundos afetam negativamente a jogabilidade em cenários competitivos. Justifica a necessidade extrema de priorizar a baixa latência na escolha do microcontrolador e via de comunicação. | [The Effects of Input Lag on Player Performance](https://dl.acm.org/doi/10.1145/2556288.2557053) |
| **Ergonomia e Controles Arcade Customizados** | Discute princípios de ergonomia no design de *gamepads*. Demonstra o valor fisiológico da disposição clássica dos botões e do joystick (formato arcade) em comparação aos controles de console modernos. | [Ergonomic Design of Video Game Controllers](https://www.tandfonline.com/doi/abs/10.1080/00140130903389068) |
| **Controles Customizados para Acessibilidade** | Apresenta a construção de hardware de controle focado na adaptação para jogadores com limitações motoras. Mostra o viés social do desenvolvimento de gamepads com microcontroladores, similar ao conceito flexível oferecido pela ESP32. | [Accessible Gaming Interfaces](https://dl.acm.org/doi/10.1145/3308561.3353787) |
| **Tempo de Reação em Jogos Competitivos** | Estuda o tempo de reação humano focado especificamente em jogos de ação veloz (*Fighting Games*). A pesquisa demonstra que o hardware (nosso controle) deve entregar dados muito mais rápido do que a percepção humana, garantindo respostas dentro de sub-quadros (menos de 16ms). | [Human Reaction Time in Competitive Gaming](https://www.nature.com/articles/s41598-020-68257-1) |

---

## 6. Comparativo com Produtos Similares

| Produto | Segmento de Mercado | Comunicação (Tecnologia) | Componentes de Controle (Motor/Direção) | Característica Distinta |
| :--- | :--- | :--- | :--- | :--- |
| **Arcade Stick ESP32 (Nosso Estudo)** | Maker/DIY/Hobby | USB (ESP32-S2/S3 recomendadas) | 1 Joystick Digital + 11 Microswitches | Hardware customizável e programável (C++), com baixo custo de produção. |
| **Controle Xbox Series X/S** | Console/PC (Mainstream) | Wireless Proprietário (2.4GHz) + USB | 2 Analógicos, D-PAD, Gatilhos de precisão | Padrão do mercado. Altamente integrado ao Windows (XInput), extremamente versátil para qualquer jogo. |
| **DualSense (PlayStation 5)** | Console/PC (Premium) | Wireless + USB | 2 Analógicos, Gatilhos Adaptativos Force Feedback | Possui sistemas complexos de *Haptic Feedback* baseados em atuadores *voice coil*, além de IMU interna. |
| **Arcade Stick Qanba Obsidian** | Fighting Games/Profissional | USB Cabeado (Baixa Latência) | Peças Sanwa Denshi Originais (JLF, OBSF) | Produto premium voltado estritamente a e-sports. Possui latência irrisória e foco total em botões de acionamento ultrarrápido. |
| **Hitbox (Leverless Controller)** | Fighting Games/Nicho | USB Cabeado | Apenas Botões (Sem Manche) | Troca o joystick clássico por botões adicionais para a movimentação direcional, diminuindo o tempo de acionamento mecânico. |

---

## 7. Referências Bibliográficas

* YU, J. et al. Design and Implementation of USB HID Device Based on MCU. *2010 International Conference on Computer Design and Applications*. IEEE, 2010. Link: <https://ieeexplore.ieee.org/document/5558197>
* GANSSLE, J. G. A Guide to Debouncing. *The Ganssle Group*, 2004. Link: <http://www.ganssle.com/debouncing.htm>
* IVKOVIC, M. et al. The Effects of Input Lag on Player Performance. *Proceedings of the SIGCHI Conference on Human Factors in Computing Systems*, 2014. Link: <https://dl.acm.org/doi/10.1145/2556288.2557053>
* BROWN, E. et al. Ergonomic Design of Video Game Controllers. *Ergonomics*, 2009. Link: <https://www.tandfonline.com/doi/abs/10.1080/00140130903389068>
* SPINDLE, C. et al. Accessible Gaming Interfaces. *ASSETS*, 2019. Link: <https://dl.acm.org/doi/10.1145/3308561.3353787>
* LIU, Y. et al. Human Reaction Time in Competitive Gaming. *Scientific Reports*, 2020. Link: <https://www.nature.com/articles/s41598-020-68257-1>
