SlideShare uma empresa 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

Mais conteúdo relacionado

Mais procurados

Tópicos de Mecânica Quântica - Capítulo 1
Tópicos de Mecânica Quântica - Capítulo 1Tópicos de Mecânica Quântica - Capítulo 1
Tópicos de Mecânica Quântica - Capítulo 1Marivane Biazus
 
Apostila reducao dos_minerios_de_ferro_cefetes
Apostila reducao dos_minerios_de_ferro_cefetesApostila reducao dos_minerios_de_ferro_cefetes
Apostila reducao dos_minerios_de_ferro_cefetesEzsilvasilva Silva
 
4 (1교시) '15년 용접세미나(용접trouble대책과접합기술동향-문흥식)-150430
4 (1교시) '15년 용접세미나(용접trouble대책과접합기술동향-문흥식)-1504304 (1교시) '15년 용접세미나(용접trouble대책과접합기술동향-문흥식)-150430
4 (1교시) '15년 용접세미나(용접trouble대책과접합기술동향-문흥식)-150430topshock
 
Apresentação de cobre
Apresentação de cobreApresentação de cobre
Apresentação de cobrejosemaycon1
 
Preparacao magnetita
Preparacao magnetitaPreparacao magnetita
Preparacao magnetitaAna Reis
 
1 processo de fabricação mecânico
1  processo de fabricação mecânico1  processo de fabricação mecânico
1 processo de fabricação mecânicoleilson maranhão
 
5 linguagem-de-programac3a7c3a3o-do-clp
5 linguagem-de-programac3a7c3a3o-do-clp5 linguagem-de-programac3a7c3a3o-do-clp
5 linguagem-de-programac3a7c3a3o-do-clpVictor Paranhos
 
Exercícios posições, direções e planos cristalinos.ppt
Exercícios posições, direções e planos cristalinos.pptExercícios posições, direções e planos cristalinos.ppt
Exercícios posições, direções e planos cristalinos.pptTharsiaCarvalho1
 
13 molas 2 molas tração e torção
13 molas 2   molas tração e torção13 molas 2   molas tração e torção
13 molas 2 molas tração e torçãoIvan Gonzaga
 
Circuitos ufmg (interessante)
Circuitos   ufmg (interessante)Circuitos   ufmg (interessante)
Circuitos ufmg (interessante)Leandro Henrique
 
Callister 8tava edition.pdf
Callister 8tava edition.pdfCallister 8tava edition.pdf
Callister 8tava edition.pdfEverton Costa
 

Mais procurados (20)

Portas logicas
Portas logicasPortas logicas
Portas logicas
 
Tópicos de Mecânica Quântica - Capítulo 1
Tópicos de Mecânica Quântica - Capítulo 1Tópicos de Mecânica Quântica - Capítulo 1
Tópicos de Mecânica Quântica - Capítulo 1
 
Estrutura cristalina de sólidos
Estrutura cristalina de sólidosEstrutura cristalina de sólidos
Estrutura cristalina de sólidos
 
Apostila reducao dos_minerios_de_ferro_cefetes
Apostila reducao dos_minerios_de_ferro_cefetesApostila reducao dos_minerios_de_ferro_cefetes
Apostila reducao dos_minerios_de_ferro_cefetes
 
4 (1교시) '15년 용접세미나(용접trouble대책과접합기술동향-문흥식)-150430
4 (1교시) '15년 용접세미나(용접trouble대책과접합기술동향-문흥식)-1504304 (1교시) '15년 용접세미나(용접trouble대책과접합기술동향-문흥식)-150430
4 (1교시) '15년 용접세미나(용접trouble대책과접합기술동향-문흥식)-150430
 
Eletrostática
EletrostáticaEletrostática
Eletrostática
 
Apresentação de cobre
Apresentação de cobreApresentação de cobre
Apresentação de cobre
 
Portas logicas
Portas logicasPortas logicas
Portas logicas
 
Preparacao magnetita
Preparacao magnetitaPreparacao magnetita
Preparacao magnetita
 
1 processo de fabricação mecânico
1  processo de fabricação mecânico1  processo de fabricação mecânico
1 processo de fabricação mecânico
 
5 linguagem-de-programac3a7c3a3o-do-clp
5 linguagem-de-programac3a7c3a3o-do-clp5 linguagem-de-programac3a7c3a3o-do-clp
5 linguagem-de-programac3a7c3a3o-do-clp
 
Aula 1 fundição
Aula 1 fundiçãoAula 1 fundição
Aula 1 fundição
 
Exercícios posições, direções e planos cristalinos.ppt
Exercícios posições, direções e planos cristalinos.pptExercícios posições, direções e planos cristalinos.ppt
Exercícios posições, direções e planos cristalinos.ppt
 
Historia do eletromagnetismo
Historia do eletromagnetismoHistoria do eletromagnetismo
Historia do eletromagnetismo
 
13 molas 2 molas tração e torção
13 molas 2   molas tração e torção13 molas 2   molas tração e torção
13 molas 2 molas tração e torção
 
Circuitos ufmg (interessante)
Circuitos   ufmg (interessante)Circuitos   ufmg (interessante)
Circuitos ufmg (interessante)
 
120919.pdf
120919.pdf120919.pdf
120919.pdf
 
Callister 8tava edition.pdf
Callister 8tava edition.pdfCallister 8tava edition.pdf
Callister 8tava edition.pdf
 
Eletromagnetismo
EletromagnetismoEletromagnetismo
Eletromagnetismo
 
Relatório protecao-ieee.2
Relatório protecao-ieee.2Relatório protecao-ieee.2
Relatório protecao-ieee.2
 

Semelhante a Como criar 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
 
Programando o arduino leonardo
Programando o arduino leonardoProgramando o arduino leonardo
Programando o arduino leonardoEdson Paiva
 
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
 

Semelhante a Como criar 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
 
Programando o arduino leonardo
Programando o arduino leonardoProgramando o arduino leonardo
Programando o arduino leonardo
 
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
 

Como criar joystick