Aula — 29 de Setembro (Segunda‐feira) - theedwilk/JoystickRaspberry-HandsOn-DevTitans GitHub Wiki
Aula — 29/09 (Segunda-feira)
Foi desenvolvido o ControlJoystick02.ino, uma versão mais aprimorada do firmware do joystick, com debounce, leitura analógica e envio estruturado dos dados em array serial.
Este firmware implementa a leitura completa de um joystick customizado para ESP32, incluindo:
- 7 botões digitais (UP, RIGHT, DOWN, LEFT, START, SELECT, ANALOG)
- Eixo analógico duplo (X e Y)
- Geração de D-Pad digital a partir dos eixos analógicos
- Envio contínuo dos estados via comunicação Serial
- Filtro de debounce por software para leituras estáveis
Objetivo: permitir que o ESP32 envie ao sistema host (Raspberry Pi) o estado completo de todos os botões e direções.
Pinos utilizados
| Função | Pino | Tipo | Observações |
|---|---|---|---|
| UP | D2 | Digital | Entrada direta (sem pull-up) |
| RIGHT | D3 | Digital | Entrada direta |
| DOWN | D4 | Digital | Entrada direta |
| LEFT | D5 | Digital | Entrada direta |
| START | D6 | Digital | Entrada com pull-up interno |
| SELECT | D7 | Digital | Entrada com pull-up interno |
| Botão | D8 | Digital | Entrada com pull-up interno |
| Eixo X | A0 | Analógico | Leitura horizontal |
| Eixo Y | A1 | Analógico | Leitura vertical |
Estrutura de botões
Cada botão é representado por uma estrutura que armazena:
- Pino associado
- Modo de entrada (INPUT ou INPUT_PULLUP)
- Estado atual e anterior
- Tempo da última mudança (para debounce)
Essa estrutura permite:
- Aplicar debounce por tempo (DEBOUNCE_MS = 25 ms)
- Identificar mudanças de estado estáveis
- Armazenar informações do pino e modo de entrada
Funções principais
setup()
Responsável por:
- Inicializar a comunicação Serial (115200 bps)
- Configurar todos os pinos conforme o tipo de botão
- Exibir cabeçalho explicativo no monitor Serial
readButtons()
- Lê cada botão e aplica debounce baseado em tempo
- Gera um vetor de 7 posições (valores 0 ou 1)
readDPadFromAnalog()
Transforma os eixos analógicos em sinais digitais de D-Pad:
- Lê analogRead(A0) e analogRead(A1)
- Calcula deslocamento em relação ao centro (AXIS_CENTER_VAL_X/Y)
- Define UP, DOWN, LEFT, RIGHT conforme o limiar (AXIS_THRESHOLD = 300)
- Resultado: 4 valores binários representando o D-Pad
readAllStates()
Combina as leituras:
- Botões digitais → posições 0 a 6
- D-Pad analógico → posições 7 a 10
Gera um array completo de 11 elementos, representando todo o joystick.
sendJoystickData()
- Envia pela Serial o pacote completo
- Começa com o prefixo J
- Usa vírgulas como separadores
- Finaliza com \n (nova linha)
loop()
Executa continuamente:
- Lê todos os estados (readAllStates)
- Envia o pacote (sendJoystickData)
- Espera 50 ms antes da próxima leitura
Histórico
| Alteração |
|---|
Criação da versão base (firmware.ino) — leitura simples e logs individuais |
Atualização para ControlJoystick02.ino — envio de array binário + debounce + D-Pad analógico |