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

Similar a Como criar o seu próprio joystick!

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
 
Introdução-à-Programação-Embarcada-com-Arduino.pdf
Introdução-à-Programação-Embarcada-com-Arduino.pdfIntrodução-à-Programação-Embarcada-com-Arduino.pdf
Introdução-à-Programação-Embarcada-com-Arduino.pdfCliverRaimundo2
 
Arduino: Brincando de eletrônica com Python e Hardware Livre
Arduino: Brincando de eletrônica com Python e Hardware LivreArduino: Brincando de eletrônica com Python e Hardware Livre
Arduino: Brincando de eletrônica com Python e Hardware LivreÁlvaro Justen
 

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

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
 
Introdução-à-Programação-Embarcada-com-Arduino.pdf
Introdução-à-Programação-Embarcada-com-Arduino.pdfIntrodução-à-Programação-Embarcada-com-Arduino.pdf
Introdução-à-Programação-Embarcada-com-Arduino.pdf
 
Arduino: Brincando de eletrônica com Python e Hardware Livre
Arduino: Brincando de eletrônica com Python e Hardware LivreArduino: Brincando de eletrônica com Python e Hardware Livre
Arduino: Brincando de eletrônica com Python e Hardware Livre
 

Como criar o seu próprio joystick!