Como criar o seu próprio joystick!

5,325 views
4,990 views

Published on

http://piragamedev.com.br/palestras/rodrigo.html

Published in: Technology

Como criar o seu próprio joystick!

  1. 1. Como criar seu próprio joystick!
  2. 2. whoami Rodrigo Delduca @skhaz http://nullonerror.org Desenvolve jogos durante o dia, cheira estanho derretido durante a noite
  3. 3. O que é um joystick?
  4. 4. Down to the metal http://pt.wikipedia.org/wiki/Ficheiro:Intel_8742_153056995.jpg
  5. 5. Pré-história O jogo fazia polling dos botões pressionados a cada frame
  6. 6. Game Port http://en.wikipedia.org/wiki/File:Da-15_port.PNG
  7. 7. Universal Serial Bus (USB)
  8. 8. HID (Human Interface Device)
  9. 9. DAFUQ?
  10. 10. HID Descriptor Tool http://www.usb.org/developers/hidpage#HID Descriptor Tool
  11. 11. Botão
  12. 12. 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
  13. 13. 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)
  14. 14. Eixos analógicos
  15. 15. 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
  16. 16. Oscilador de Cristal Define o ritmo, como se fosse o coração ou o surdo numa orquestra
  17. 17. Microcontrolador
  18. 18. Microcontrolador Principais fabricantes: - Freescale (68HC08, 68HC16, MPC 8540/8555/8560) - Microchip (PIC16F628, PIC16F84, PIC18F452) - Atmel AVR (AT90, ATMega, ATTiny) - Intel - Texas Instruments - ETC...
  19. 19. Microcontrolador Principais fabricantes: - Freescale (68HC08, 68HC16, MPC 8540/8555/8560) - Microchip (PIC16F628, PIC16F84, PIC18F452) - Atmel AVR (AT90, ATMega, ATTiny) - Intel - Texas Instruments - ETC...
  20. 20. 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)
  21. 21. 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
  22. 22. #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
  23. 23. Fritzing http://fritzing.org
  24. 24. Fritzing
  25. 25. http://www.cadsoftusa.com/
  26. 26. 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
  27. 27. Let's Rock!
  28. 28. 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
  29. 29. Piece of Cake - Arduino UNO Rev 3 - dfu-programmer - Botões e Eixos analógicos a gosto - Uma tesoura sem ponta
  30. 30. LUFA (Lightweight USB Framework for AVRs)
  31. 31. 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...)
  32. 32. Arduino IDE
  33. 33. Colocando o Arduino UNO Rev3 em modo DFU
  34. 34. make dfu-programmer at90usb82 erase dfu-programmer at90usb82 flash Joystick.hex dfu-programmer at90usb82 reset Desconecte e conecte... E pronto :)
  35. 35. "Talk is cheap, show me the code" -- Linus Torvalds
  36. 36. Come Get Some
  37. 37. Prós: - Funciona com praticamente todos os microcontroladores Atmega/AVR - Simples Contras: - Documentação escassa
  38. 38. Um programador
  39. 39. Não aquele, este programador
  40. 40. 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/
  41. 41. - 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
  42. 42. Esquema Elétrico
  43. 43. Debug is on the table! "The most effective debugging tool is still careful thought, coupled with judiciously placed print statements" -- Brian W. Kernighan
  44. 44. 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
  45. 45. Scorpion Wins... Fatality! Flawless Victory

×