Sunday, April 30, 2017

Using the PI Cobbler on an Arduino

Introduction


The PI Cobbler (made by Adafruit) is a great tool that is used to connect a Raspberry PI to a bread board.
PI Cobbler

The Arduino Uno board on the other hand is not so straight forward to connect to a breadboard. You often end up with a mess of many wires
Arduino Uno requires individual wires towards the breadboard
An alternative is to use an Arduino Nano that fits directly on the breadboard
Arduino Nano fits directly on Breadboard


It would be great to be able to connect a flat cable directly to the Arduino UNO. So let's build an adapter UNO -> Flat cable

Assembly instructions

Needed stuff

You will need
  1. A PI Cobbler
  2. A 2x40 Positions Header, Breakaway Connector 0.100" (2.54mm) Through Hole
  3. An Arduino Uno
  4. An Arduino Protoshield (I use the one from Adafruit) 
  5. Some cabling wire
  6. Some solder
Update on May 2 2017:
STOP DON'T USE THE ADAFRUIT PI COBBLER!! it is only intended for the Raspberry PI. It contains internal wiring that connect all the Raspberry PI GND together this may damage your Arduino and / or prevent your project from working 

Monday, January 2, 2017

Creating a WASD joystick with an Arduino Esplora

Introduction

The classic WASD game keys are very popular. But if this key layout is nice on QWERTY keyboard, it is not so logical on an AZERTY keyboard.


With such layout you cannot make great score at any game.
The classic solution is to configure the keyboard as a US QWERTY keyboard for the duration of the game. But that's not a very satisfactory solution. What we need is a joystick that behaves like the WASD keys.

The Arduino Esplora board

The Arduino Esplora board is an Arduino Leonardo board that implement a joystick.
This is exactly what we need.

 The Leonardo (and the Esplora) board can behave like an HID device. This means that they can be programmed to behave as an USB mouse or as an USB  keyboard by the computer.

Now all we need is to program it so that the board joystick generates the WSAD key press.

The program

Enrico Gueli has written a program called "EsploraKart" (www.arduino.cc/en/Tutorial/EsploraKart) that does exactly what we want except that he has used the arrow keys instead of the WSAD keys.
Now lets modify his program to get the WSAD keys mapping:

/*
 esploraWASD
 This is a sketch is a modification of "EsploraKart" written by Enrico Gueli
 The joystick will send the WASD keys and
 the switches will send "space"
*/
#include <Esplora.h>
#include <Keyboard.h>
boolean buttonStates[8];
const byte buttons[] = {
  JOYSTICK_DOWN,
  JOYSTICK_LEFT,
  JOYSTICK_UP,
  JOYSTICK_RIGHT,
 
  SWITCH_RIGHT,
  SWITCH_LEFT,
  SWITCH_UP,
  SWITCH_DOWN
};
const char keystrokes[] = {
  's',
  'a',
  'w',
  'd',
  ' ',
  ' ',
  ' ',
  ' '

};
void setup() {
  Keyboard.begin();
}
void loop() {
  for (byte thisButton = 0; thisButton < 8; thisButton++) {
    boolean lastState = buttonStates[thisButton];
    boolean newState = Esplora.readButton(buttons[thisButton]);
    if (lastState != newState) { // Something changed!
      if (newState == PRESSED) {
        Keyboard.press(keystrokes[thisButton]);
      }
      else if (newState == RELEASED) {
        Keyboard.release(keystrokes[thisButton]);
      }
    }
    buttonStates[thisButton] = newState;
  }
  delay(50);
}

I have removed the comments and marked in red the modified lines

 Return of the AZERTY problem

The above program will work great if you have a QWERTY (or a German QWERTZ) keyboard, but strangely, it does not work with a computer configured with an AZERTY keyboard.

On a AZERTY computer the Esplora board outputs are  ZQSD instead of WASD.
If you look at the position of the ZQSD keys on an AZERTY keyboard you will notice that they are at the same location as the WASD keys on a QWERTY keyboard.

This is a limitation of the Arduino Keyboard library: this library allows to simulate a keyboard with a Leonardo or an Esplora board but the simulated keyboard is expecting that the computer uses a US QWERTY keyboard layout.

This origin of this restriction comes from the HID protocol: It specifies a key location on the keyboard and it is the computer responsibility to map this key location to a key symbol (or a special key).

I should have tried to adapt the Arduino Keyboard library to support multiple keyboard layouts. But I was too lazy ( this guy did something like that www.zem.fr). I simply have mapped the AZERTY keys in my program. This makes the program only usable on an AZERTY PC.

const char keystrokes[] = {
  's',//s
  'q',//a
  'z',//w
  'd',//d
  ' ',
  ' ',
  ' ',
  ' '
};

With this mapping the Esplora board is behaving like a WASD joystick. This is what I needed.