Steuerung implementieren

Für die Umsetzung der Steuerung des Gameboy Zero wird ein Teensy LC verwendet. Dieser kann ein Keyboard simulieren und lagert die Abfragen der Tastendrücke am Gameboy auf einen vom Raspberry Pi unabhängigen Prozessor aus. Es wird zuerst der Teensy programmiert und anschließend die Verkabelung am eignen Board aus vorherigem Kapitel vorgenommen.

Teensy programmieren

Zuerst muss die Das Arduino IDE installiert werden, anschließend die Teensy Software Erweiterung. Die Arduino IDE sollte nach Installation zuerst gestartet und beendet werden. Die Teensy Software wird dann in den Installationsordner der Arduino Software installiert. Bei der aktuellen Arduino Version 1.8.4 kam es sowohl mit dem akteullen stabilen 1.38 Build, als auch dem 1.39 beta Build der Teensy Erweiterung zu Problemen beim Build Prozess. Daher wurde eine ältere Versionenkombination gewählt, die einwandfrei funktioniert. Die Arduino Version 1.6.8 ist kompatibel mit der Teensy Version 1.28.

Arduino EinstellungenNach Installation der Software müssen in der Arduino Software noch die Einstellungen für das Teensy Board vorgenommen werden. Das verwendete Board unter Tools > Board > Teensy LC ausgewählt werden und der USB Typ unter Tools > USB Type auf “Keyboard + Mouse + Joystick” geändert werden. Teensy ProgrammiermodusDer folgende Code setzt die Steuerung auf die Pins 0-12. Der Code wird mit dem Häkchen oben links gebaut und verifiziert. Danach kann er mit der Rechtspfeil-Taste daneben auf den Teensy geladen werden. Dieser muss dafür über den Reset Button auf dem Teensy in den Programmiermodus versetzt werden. Bei erfolgreichem Überspielen der Datei wird angezeigt, wie viel Speicherplatz der “Sketch” auf dem Board verwendet hat.

#include <Bounce.h>
#define NUM_KEYS 13

struct Key {
   int keycode;
   Bounce* bounce;
};

Key keys[NUM_KEYS];

Key key(int keycode, int pin) {
   Key *ret = new Key;
   ret->keycode = keycode;
   ret->bounce = new Bounce(pin, 10);
   pinMode(pin, INPUT_PULLUP);
   return *ret;
}

void setupKeys() {
   keys[0] = key(KEY_LEFT_ARROW, 0);
   keys[1] = key(KEY_UP_ARROW, 1);
   keys[2] = key(KEY_DOWN_ARROW, 2);
   keys[3] = key(KEY_RIGHT_ARROW, 3);
   keys[4] = key(KEY_TAB, 4);
   keys[5] = key(KEY_RETURN, 5);
   keys[6] = key('o', 6);
   keys[7] = key('k', 7);
   keys[8] = key('x', 8);
   keys[9] = key('z', 9);
   keys[10] = key('q',10);
   keys[11] = key('e',11);
   keys[12] = key(KEY_ESC, 12);
}

void setup() {
   setupKeys();
   Keyboard.begin();
   // pinMode(0, INPUT_PULLUP);
}

void loop() {
for (int i = 0; i < NUM_KEYS; i++) {
   keys[i].bounce->update();
   if (keys[i].bounce->fallingEdge()) {
      Keyboard.press(keys[i].keycode);
      } else if (keys[i].bounce->risingEdge()) {
         Keyboard.release(keys[i].keycode);
      }
   }
}

 Verkabelung der Steuerung

Die Verkabelung des Teensy mit dem Controller-Board wird entsprechend der obigen Programmierung folgendermaßen vorgenommen:

  • Pin 0 – Links
  • Pin 1 – Rechts
  • Pin 2 – Oben
  • Pin 3 – Unten
  • Pin 4 – Select
  • Pin 5 – Start
  • Pin 6 – X
  • Pin 7 – Y
  • Pin 8 – A
  • Pin 9 – B
  • Pin 10 – Left Trigger
  • Pin 11 – Right Trigger
  • Pin 12 – Exit

Dabei kann ein Breitbandkabel verwendet werden, da die Belegung der Pins an die Reihenfolge der Ausführungen des Controller-Boards angepasst wurde. Abschließend kann die Steuerung am PC getestet werden, oder direkt am Raspberry Pi Zero. Dafür wird der Teensy über seine USB Schnittstelle angeschlossen.