$30 off During Our Annual Pro Sale. View Details »

Como criar o seu próprio joystick

Como criar o seu próprio joystick

Rodrigo Delduca

June 20, 2013
Tweet

More Decks by Rodrigo Delduca

Other Decks in Technology

Transcript

  1. Como criar seu
    próprio joystick!

    View Slide

  2. whoami
    Rodrigo Delduca
    @skhaz
    http://nullonerror.org
    Desenvolve jogos durante o dia, cheira estanho derretido
    durante a noite

    View Slide

  3. O que é um joystick?

    View Slide

  4. View Slide

  5. View Slide

  6. Down to the metal
    http://pt.wikipedia.org/wiki/Ficheiro:Intel_8742_153056995.jpg

    View Slide

  7. Pré-história
    O jogo fazia polling
    dos botões
    pressionados a cada
    frame

    View Slide

  8. Game Port
    http://en.wikipedia.org/wiki/File:Da-15_port.PNG

    View Slide

  9. Universal Serial Bus (USB)

    View Slide

  10. HID (Human Interface Device)

    View Slide

  11. DAFUQ?

    View Slide

  12. HID Descriptor Tool
    http://www.usb.org/developers/hidpage#HID Descriptor Tool

    View Slide

  13. Botão

    View Slide

  14. 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

    View Slide

  15. 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)

    View Slide

  16. Eixos analógicos

    View Slide

  17. 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

    View Slide

  18. Oscilador de Cristal
    Define o ritmo, como se fosse o coração ou o
    surdo numa orquestra

    View Slide

  19. Microcontrolador

    View Slide

  20. Microcontrolador
    Principais fabricantes:
    - Freescale (68HC08, 68HC16, MPC
    8540/8555/8560)
    - Microchip (PIC16F628, PIC16F84,
    PIC18F452)
    - Atmel AVR (AT90, ATMega, ATTiny)
    - Intel
    - Texas Instruments
    - ETC...

    View Slide

  21. Microcontrolador
    Principais fabricantes:
    - Freescale (68HC08, 68HC16, MPC
    8540/8555/8560)
    - Microchip (PIC16F628, PIC16F84,
    PIC18F452)
    - Atmel AVR (AT90, ATMega, ATTiny)
    - Intel
    - Texas Instruments
    - ETC...

    View Slide

  22. 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)

    View Slide

  23. 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

    View Slide

  24. #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

    View Slide

  25. Fritzing
    http://fritzing.org

    View Slide

  26. Fritzing

    View Slide

  27. http://www.cadsoftusa.com/

    View Slide

  28. 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

    View Slide

  29. Let's Rock!

    View Slide

  30. 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

    View Slide

  31. Piece of Cake
    - Arduino UNO Rev 3
    - dfu-programmer
    - Botões e Eixos analógicos a gosto
    - Uma tesoura sem ponta

    View Slide

  32. LUFA
    (Lightweight USB Framework for AVRs)

    View Slide

  33. 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...)

    View Slide

  34. Arduino IDE

    View Slide

  35. Colocando o Arduino UNO Rev3 em
    modo DFU

    View Slide

  36. View Slide

  37. make
    dfu-programmer at90usb82 erase
    dfu-programmer at90usb82 flash Joystick.hex
    dfu-programmer at90usb82 reset
    Desconecte e conecte... E pronto :)

    View Slide

  38. "Talk is cheap, show me the code"
    -- Linus Torvalds

    View Slide

  39. Come Get Some

    View Slide

  40. View Slide

  41. Prós:
    - Funciona com praticamente todos os
    microcontroladores Atmega/AVR
    - Simples
    Contras:
    - Documentação escassa

    View Slide

  42. Um programador

    View Slide

  43. Não aquele, este programador

    View Slide

  44. 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/

    View Slide

  45. - 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

    View Slide

  46. Esquema Elétrico

    View Slide

  47. Debug is on the table!
    "The most effective debugging tool is still
    careful thought, coupled with judiciously placed
    print statements"
    -- Brian W. Kernighan

    View Slide

  48. 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

    View Slide

  49. Scorpion Wins... Fatality!
    Flawless Victory

    View Slide