Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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. 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
  2. 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)
  3. 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
  4. Oscilador de Cristal Define o ritmo, como se fosse o

    coração ou o surdo numa orquestra
  5. Microcontrolador Principais fabricantes: - Freescale (68HC08, 68HC16, MPC 8540/8555/8560) -

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

    Microchip (PIC16F628, PIC16F84, PIC18F452) - Atmel AVR (AT90, ATMega, ATTiny) - Intel - Texas Instruments - ETC...
  7. 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)
  8. 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
  9. #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
  10. 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
  11. 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
  12. Piece of Cake - Arduino UNO Rev 3 - dfu-programmer

    - Botões e Eixos analógicos a gosto - Uma tesoura sem ponta
  13. 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...)
  14. 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/
  15. - 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
  16. Debug is on the table! "The most effective debugging tool

    is still careful thought, coupled with judiciously placed print statements" -- Brian W. Kernighan