diff options
Diffstat (limited to 'libraries/Esplora/Experts/EsploraKart')
| -rw-r--r-- | libraries/Esplora/Experts/EsploraKart/EsploraKart.ino | 125 | 
1 files changed, 125 insertions, 0 deletions
| diff --git a/libraries/Esplora/Experts/EsploraKart/EsploraKart.ino b/libraries/Esplora/Experts/EsploraKart/EsploraKart.ino new file mode 100644 index 0000000..4c1621c --- /dev/null +++ b/libraries/Esplora/Experts/EsploraKart/EsploraKart.ino @@ -0,0 +1,125 @@ +/* +  Esplora Kart + +  This sketch turns the Esplora into a PC game pad. + +  It uses the both the analog joystick and the four switches. +  By moving the joystick in a direction or by pressing a switch, +  the PC will "see" that a key is pressed. If the PC is running +  a game that has keyboard input, the Esplora can control it. +   +  The default configuration is suitable for SuperTuxKart, an +  open-source racing game. It can be downloaded from +  http://supertuxkart.sourceforge.net/ . + +  Created on 22 november 2012 +  By Enrico Gueli <enrico.gueli@gmail.com> +*/ + + +#include <Esplora.h> + +/* +  You're going to handle eight different buttons. You'll use arrays,  +  which are ordered lists of variables with a fixed size. Each array  +  has an index (counting from 0) to keep track of the position +  you're reading in the array, and each position can contain a number. +  +  This code uses three different arrays: one for the buttons you'll read; +  a second to hold the current states of those buttons; and a third to hold +  the keystrokes associated with each button. + */ + +/* +  This array holds the last sensed state of each of the buttons +  you're reading. +  Later in the code, you'll read the button states, and compare them +  to the previous states that are stored in this array. If the two +  states are different, it means that the button was either +  pressed or released. + */ +boolean buttonStates[8]; + +/* +  This array holds the names of the buttons being read. +  Later in the sketch, you'll use these names with +  the method Esplora.readButton(x), where x +  is one of these buttons. + */ +const byte buttons[] = { +  JOYSTICK_DOWN, +  JOYSTICK_LEFT, +  JOYSTICK_UP, +  JOYSTICK_RIGHT, +  SWITCH_RIGHT, // fire +  SWITCH_LEFT, // bend +  SWITCH_UP, // nitro +  SWITCH_DOWN, // look back +}; + +/* +  This array tells what keystroke to send to the PC when a +  button is pressed. +  If you look at this array and the above one, you can see that +  the "cursor down" keystroke is sent when the joystick is moved +  down, the "cursor up" keystroke when the joystick is moved up +  and so on. +*/ +const char keystrokes[] = { +  KEY_DOWN_ARROW, +  KEY_LEFT_ARROW, +  KEY_UP_ARROW, +  KEY_RIGHT_ARROW, +  ' ', +  'V', +  'N', +  'B' +}; + +/* +  This is code is run only at startup, to initialize the +  virtual USB keyboard. +*/ +void setup() { +  Keyboard.begin(); +} + +/* +  After setup() is finished, this code is run continuously. +  Here we continuously check if something happened with the +  buttons. +*/ +void loop() {  +   +  // Iterate through all the buttons: +  for (byte thisButton=0; thisButton<8; thisButton++) { +    boolean lastState = buttonStates[thisButton]; +    boolean newState = Esplora.readButton(buttons[thisButton]); +    if (lastState != newState) { // Something changed! +      /*  +        The Keyboard library allows you to "press" and "release" the +        keys as two distinct actions. These actions can be +        linked to the buttons we're handling. +       */ +      if (newState == PRESSED) { +        Keyboard.press(keystrokes[thisButton]); +      } +      else if (newState == RELEASED) { +        Keyboard.release(keystrokes[thisButton]); +      } +    } + +    // Store the new button state, so you can sense a difference later: +    buttonStates[thisButton] = newState; +  } +   +  /* +    Wait a little bit (50ms) between a check and another. +    When a mechanical switch is pressed or released, the +    contacts may bounce very rapidly. If the check is done too +    fast, these bounces may be confused as multiple presses and +    may lead to unexpected behaviour. +   */ +  delay(50); +} + | 
