SlideShare una empresa de Scribd logo
1 de 49
Como criar seu
próprio joystick!
whoami
Rodrigo Delduca
@skhaz
http://nullonerror.org
Desenvolve jogos durante o dia, cheira estanho derretido
durante a noite
O que é um joystick?
Down to the metal
http://pt.wikipedia.org/wiki/Ficheiro:Intel_8742_153056995.jpg
Pré-história
O jogo fazia polling
dos botões
pressionados a cada
frame
Game Port
http://en.wikipedia.org/wiki/File:Da-15_port.PNG
Universal Serial Bus (USB)
HID (Human Interface Device)
DAFUQ?
HID Descriptor Tool
http://www.usb.org/developers/hidpage#HID Descriptor Tool
Botão
Uma CPU (normalmente de 8 bits) faz
a leitura dos botões e eixos
analógicos periodicamente e os envia
para o console e/ou PC
Potenciômetro
Um potenciômetro é um componente eletrônico que possui
resistência elétrica ajustável
(Imagens http://baudaeletronica.blogspot.com.br/2011/09/potenciometro.html)
Eixos analógicos
Analog-to-digital converter (ADC)
Responsável por traduzir grandezas analógicas para
uma representação digital, o microcontrolador
escolhido tem uma resolução de 10 bits, ou seja,
ADC value = Vin * 2 ^ 10 / ARef
Oscilador de Cristal
Define o ritmo, como se fosse o coração ou o
surdo numa orquestra
Microcontrolador
Microcontrolador
Principais fabricantes:
- Freescale (68HC08, 68HC16, MPC
8540/8555/8560)
- Microchip (PIC16F628, PIC16F84,
PIC18F452)
- Atmel AVR (AT90, ATMega, ATTiny)
- Intel
- Texas Instruments
- ETC...
Microcontrolador
Principais fabricantes:
- Freescale (68HC08, 68HC16, MPC
8540/8555/8560)
- Microchip (PIC16F628, PIC16F84,
PIC18F452)
- Atmel AVR (AT90, ATMega, ATTiny)
- Intel
- Texas Instruments
- ETC...
Atmel AVR
- Arquitetura AVR
- 3 tipos de mémoria (Flash, EEPROM e
SRAM)
- Alguns modelos possuem um oscilador
interno, simplificando ainda mais o projeto
- O mesmo microcontrolador que o Arduino
utiliza (Atmega168/328)
Será um termo bem comum a partir de agora,
que vai permitir fazer operações bit a bit em
determinada áreas. No nosso caso,
poderemos "empacotar" até 8 botões num
único byte usando o operador OR, e mais
tarde usar máscaras para verificar por
determinado bit usando o operador AND
Máscara de bits
#define BUTTON_UP 0x00000001
#define BUTTON_DOWN 0x00000002
#define BUTTON_LEFT 0x00000004
#define BUTTON_RIGHT 0x00000008
uint8_t buttons = GetButtonsState(); // Ex. Retorna o valor 5, que é 00000101 em
binário
if (buttons & BUTTON_UP) { // 00000101 AND 00000001 Resulta em verdadeiro
y_vel = -5;
}
else if (buttons & BUTTON_DOWN) { // 00000101 AND 00000010 Resulta em falso
y_vel = 5;
}
if (buttons & BUTTON_LEFT) { // 00000101 AND 00000100 Resulta em verdadeiro
x_vel = -5;
}
else if (buttons & BUTTON_RIGHT) { // 00000101 AND 00001000 Resulta em falso
x_vel = 5;
}
x += x_vel;
y += y_vel;
Máscara de bits
Fritzing
http://fritzing.org
Fritzing
http://www.cadsoftusa.com/
Vamos ver duas maneiras de implementar o
joystick, usando duas bibliotecas e dois
hardwares diferentes, Qual você vai encarar:
Piece of Cake ou Come Get Some?
Chega de blá blá... Mãos à
obra
Let's Rock!
Toolchain e ferramentas
- avr-gcc: Compilador GCC modificado para gerar binários
para a plataforma AVR
- avr-libc: Biblioteca padrão C portada para arquitetura AVR
- avr-binutils: Diversos utilitarios utilizados durante o processo
de compilação (ld, strings, dlltool, as, etc...)
- avrdude: Usado para subir e baixar o programa no
microcontrolador
- dfu-programmer: Usado para subir firmware em
microcontroladores com USB bootloader já pre-carregado
Piece of Cake
- Arduino UNO Rev 3
- dfu-programmer
- Botões e Eixos analógicos a gosto
- Uma tesoura sem ponta
LUFA
(Lightweight USB Framework for AVRs)
Prós:
- Fácil de usar e bem documentado
- Vários exemplos
- Suporta dezenas de dispositivos (Audio In,
Audio out, keyboard, MIDI, Mouse, Joystick,
Impressora, dispositivo de armazenamento em
massa, etc)
Contras:
- Funciona apenas com série USB da Atmel
(atmega8u2, atmega16u2, etc...)
Arduino IDE
Colocando o Arduino UNO Rev3 em
modo DFU
make
dfu-programmer at90usb82 erase
dfu-programmer at90usb82 flash Joystick.hex
dfu-programmer at90usb82 reset
Desconecte e conecte... E pronto :)
"Talk is cheap, show me the code"
-- Linus Torvalds
Come Get Some
Prós:
- Funciona com praticamente todos os
microcontroladores Atmega/AVR
- Simples
Contras:
- Documentação escassa
Um programador
Não aquele, este programador
Se você não tem um programador ISP
(In-System Programmer), não tem
problema, é possivel utilizar um
Arduino, BeagleBone, Android IOIO,
ou ainda um RaspberryPi para tal
http://arduino.cc/en/Tutorial/ArduinoISP
http://blog.stevemarple.co.uk/2012/07/avrarduino-isp-programmer-using.html
http://www.instructables.com/id/Program-an-Arduino-using-BeagleBone-
without-USB/
- Atmega168/328
- 2x Capacitor cerâmico de 22pf (picofarads)
- 1 Oscilador de 16Mhz
- 1 Resistor de 1.5 Kiloohms
- 2 Resitores de 47 Ohms
- 2 Diodos Zener de 3.6V 500mw
- Protoboard
- Muitos Fios! (a.k.a. jumpwires)
- Botões e Eixos analógicos a gosto
Esquema Elétrico
Debug is on the table!
"The most effective debugging tool is still
careful thought, coupled with judiciously placed
print statements"
-- Brian W. Kernighan
http://graphics.stanford.edu/~seander/bithacks.html
http://vusb.wikidot.com/hardware
http://www.fourwalledcubicle.com/LUFA.php
https://www.sparkfun.com/tutorials/220
http://www.nullonerror.org/
http://arduino.cc/en/Hacking/HomePage
http://www.usb.org/developers/hidpage#HID Descriptor Tool
http://www.ladyada.net/library/picvsavr.html
Scorpion Wins... Fatality!
Flawless Victory

Más contenido relacionado

La actualidad más candente

LAFS Game Mechanics - Narrative Elements
LAFS Game Mechanics - Narrative ElementsLAFS Game Mechanics - Narrative Elements
LAFS Game Mechanics - Narrative ElementsDavid Mullich
 
LAFS Game Design 6 - Conceptualization
LAFS Game Design 6 - ConceptualizationLAFS Game Design 6 - Conceptualization
LAFS Game Design 6 - ConceptualizationDavid Mullich
 
국내인디게임개발자의현실
국내인디게임개발자의현실국내인디게임개발자의현실
국내인디게임개발자의현실Mingu Heo
 
LAFS Game Design 7 - Prototyping
LAFS Game Design 7 - PrototypingLAFS Game Design 7 - Prototyping
LAFS Game Design 7 - PrototypingDavid Mullich
 
Warm up activities
Warm up activitiesWarm up activities
Warm up activitiesRoux-i Zt
 
Análisis Heurístico, FODA y resultados
Análisis Heurístico, FODA y resultadosAnálisis Heurístico, FODA y resultados
Análisis Heurístico, FODA y resultadosMaria Jesus Abarca
 
LAFS Game Mechanics - The Core Mechanic
LAFS Game Mechanics - The Core MechanicLAFS Game Mechanics - The Core Mechanic
LAFS Game Mechanics - The Core MechanicDavid Mullich
 
Chronic Traumatic Encephalopathy
Chronic Traumatic EncephalopathyChronic Traumatic Encephalopathy
Chronic Traumatic EncephalopathyChee Oh
 
Updated How to connect OBS and Zoom
Updated How to connect OBS and ZoomUpdated How to connect OBS and Zoom
Updated How to connect OBS and ZoomPaul Richards
 
Unity 3D
Unity 3DUnity 3D
Unity 3Dgema123
 
Educacion fisica 6
Educacion fisica 6Educacion fisica 6
Educacion fisica 6Omar Valdez
 
Videojuegos educativos
Videojuegos educativosVideojuegos educativos
Videojuegos educativosEduardo Duran
 
레벨 디자인의 구성
레벨 디자인의 구성레벨 디자인의 구성
레벨 디자인의 구성준태 김
 
10 page pitch for game design
10 page pitch for game design10 page pitch for game design
10 page pitch for game designTom Carter
 

La actualidad más candente (20)

Unity - Game Engine
Unity - Game EngineUnity - Game Engine
Unity - Game Engine
 
LAFS Game Mechanics - Narrative Elements
LAFS Game Mechanics - Narrative ElementsLAFS Game Mechanics - Narrative Elements
LAFS Game Mechanics - Narrative Elements
 
LAFS Game Design 6 - Conceptualization
LAFS Game Design 6 - ConceptualizationLAFS Game Design 6 - Conceptualization
LAFS Game Design 6 - Conceptualization
 
국내인디게임개발자의현실
국내인디게임개발자의현실국내인디게임개발자의현실
국내인디게임개발자의현실
 
LAFS Game Design 7 - Prototyping
LAFS Game Design 7 - PrototypingLAFS Game Design 7 - Prototyping
LAFS Game Design 7 - Prototyping
 
English in-camp
English in-campEnglish in-camp
English in-camp
 
Warm up activities
Warm up activitiesWarm up activities
Warm up activities
 
Análisis Heurístico, FODA y resultados
Análisis Heurístico, FODA y resultadosAnálisis Heurístico, FODA y resultados
Análisis Heurístico, FODA y resultados
 
LAFS Game Mechanics - The Core Mechanic
LAFS Game Mechanics - The Core MechanicLAFS Game Mechanics - The Core Mechanic
LAFS Game Mechanics - The Core Mechanic
 
Chronic Traumatic Encephalopathy
Chronic Traumatic EncephalopathyChronic Traumatic Encephalopathy
Chronic Traumatic Encephalopathy
 
[PandoraCube] 게임 타격감에 대하여
[PandoraCube] 게임 타격감에 대하여[PandoraCube] 게임 타격감에 대하여
[PandoraCube] 게임 타격감에 대하여
 
Updated How to connect OBS and Zoom
Updated How to connect OBS and ZoomUpdated How to connect OBS and Zoom
Updated How to connect OBS and Zoom
 
Encephalitis
EncephalitisEncephalitis
Encephalitis
 
Unity 3D
Unity 3DUnity 3D
Unity 3D
 
Educacion fisica 6
Educacion fisica 6Educacion fisica 6
Educacion fisica 6
 
Videojuegos educativos
Videojuegos educativosVideojuegos educativos
Videojuegos educativos
 
Mobile Games
Mobile GamesMobile Games
Mobile Games
 
레벨 디자인의 구성
레벨 디자인의 구성레벨 디자인의 구성
레벨 디자인의 구성
 
10 page pitch for game design
10 page pitch for game design10 page pitch for game design
10 page pitch for game design
 
PERIPHERAL NEUROPATHY
PERIPHERAL NEUROPATHYPERIPHERAL NEUROPATHY
PERIPHERAL NEUROPATHY
 

Similar a Como criar o seu próprio joystick!

Ufes erus minicurso arduino
Ufes erus minicurso arduinoUfes erus minicurso arduino
Ufes erus minicurso arduinotamarasalvatori
 
V2 - Microcontroladores: a revolucao do arduino
V2 - Microcontroladores: a revolucao do arduinoV2 - Microcontroladores: a revolucao do arduino
V2 - Microcontroladores: a revolucao do arduinoSamir Siqueira
 
Arduino no Dia-Debian/RJ 2011
Arduino no Dia-Debian/RJ 2011Arduino no Dia-Debian/RJ 2011
Arduino no Dia-Debian/RJ 2011Álvaro Justen
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduinoelliando dias
 
38698469 slides-arduino
38698469 slides-arduino38698469 slides-arduino
38698469 slides-arduinoRui Alves
 
Apostila - Tutorial Arduino (Básico).PDF
Apostila - Tutorial Arduino (Básico).PDFApostila - Tutorial Arduino (Básico).PDF
Apostila - Tutorial Arduino (Básico).PDFengelrfs
 
Programação básica de microcontroladores
Programação básica de microcontroladoresProgramação básica de microcontroladores
Programação básica de microcontroladoresDanilo Morais Pagano
 
Workshop iniciação à robótica - Farrusco
Workshop iniciação à robótica - FarruscoWorkshop iniciação à robótica - Farrusco
Workshop iniciação à robótica - FarruscoArticacc, Lda
 
EL66J_Slides_arduino.pdf
EL66J_Slides_arduino.pdfEL66J_Slides_arduino.pdf
EL66J_Slides_arduino.pdfssuser56423c1
 
Mini Curso Sistemas Embarcados
Mini Curso Sistemas EmbarcadosMini Curso Sistemas Embarcados
Mini Curso Sistemas EmbarcadosSuzana Viana Mota
 
Arduino: Construindo robôs com software e hardware livres
Arduino: Construindo robôs com software e hardware livresArduino: Construindo robôs com software e hardware livres
Arduino: Construindo robôs com software e hardware livresÁlvaro Justen
 
História do computador
História do computadorHistória do computador
História do computadortrairinha
 

Similar a Como criar o seu próprio joystick! (20)

Erus minicurso arduino
Erus minicurso arduinoErus minicurso arduino
Erus minicurso arduino
 
Ufes erus minicurso arduino
Ufes erus minicurso arduinoUfes erus minicurso arduino
Ufes erus minicurso arduino
 
ARDUINO PRIMEIROS PASSOS
ARDUINO  PRIMEIROS PASSOSARDUINO  PRIMEIROS PASSOS
ARDUINO PRIMEIROS PASSOS
 
Introdução a plataforma arduino
Introdução a plataforma arduinoIntrodução a plataforma arduino
Introdução a plataforma arduino
 
V2 - Microcontroladores: a revolucao do arduino
V2 - Microcontroladores: a revolucao do arduinoV2 - Microcontroladores: a revolucao do arduino
V2 - Microcontroladores: a revolucao do arduino
 
Arduino no Dia-Debian/RJ 2011
Arduino no Dia-Debian/RJ 2011Arduino no Dia-Debian/RJ 2011
Arduino no Dia-Debian/RJ 2011
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduino
 
38698469 slides-arduino
38698469 slides-arduino38698469 slides-arduino
38698469 slides-arduino
 
Apostila - Tutorial Arduino (Básico).PDF
Apostila - Tutorial Arduino (Básico).PDFApostila - Tutorial Arduino (Básico).PDF
Apostila - Tutorial Arduino (Básico).PDF
 
Programação básica de microcontroladores
Programação básica de microcontroladoresProgramação básica de microcontroladores
Programação básica de microcontroladores
 
Arduino
ArduinoArduino
Arduino
 
Workshop iniciação à robótica - Farrusco
Workshop iniciação à robótica - FarruscoWorkshop iniciação à robótica - Farrusco
Workshop iniciação à robótica - Farrusco
 
Oficina Arduino
Oficina ArduinoOficina Arduino
Oficina Arduino
 
EL66J_Slides_arduino.pdf
EL66J_Slides_arduino.pdfEL66J_Slides_arduino.pdf
EL66J_Slides_arduino.pdf
 
Mini Curso Sistemas Embarcados
Mini Curso Sistemas EmbarcadosMini Curso Sistemas Embarcados
Mini Curso Sistemas Embarcados
 
Arduino: Construindo robôs com software e hardware livres
Arduino: Construindo robôs com software e hardware livresArduino: Construindo robôs com software e hardware livres
Arduino: Construindo robôs com software e hardware livres
 
História do computador
História do computadorHistória do computador
História do computador
 
3 aula do curso de automação - Arduino
3 aula do curso de automação - Arduino3 aula do curso de automação - Arduino
3 aula do curso de automação - Arduino
 
Workshop de Arduino
Workshop de ArduinoWorkshop de Arduino
Workshop de Arduino
 
Arduino
ArduinoArduino
Arduino
 

Último

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfNatalia Granato
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 

Último (6)

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 

Como criar o seu próprio joystick!