Arduino N64 Controller Library und Tetris-Port

Moved to GitHub: https://github.com/pothos/arduino-n64-controller-library

Die Arduino-Plattform (arduino.cc) bietet einen einfachen Einstieg in die Microcontroller-Programmierung und ist gerade im Nicht-Geek-Bereich eine Erfolgsgeschichte. Die vielen Bibliotheken ermöglichen es, hauptsächlich auf der „Organisationsebene“ zu bleiben – in kurzer Zeit war aus der Kombination von TVout, dem verfügbaren Tetris-Clone und einigen Modifikationen zum Speichern der Highscore im EEPROM eine archaische Spielkonsole aufgebaut. Dank dieser Anleitung konnte ein N64-Controller benutzt werden. Während für NES relativ viel Quellcode verfügbar ist, gibt es keine komfortable N64-Controller-Library, da wegen exaktem Timing Inline-Assembler verwendet wird und der PIN fest eingeschrieben ist. Meine Bibliothek ist vielleicht nicht in schönster Manier geschrieben und alles andere als optimal in der Codegröße, aber für eine Erstveröffentlichung sollte es ausreichen – komfortabel ist sie zumindest (auch alle möglichen PINs von 0 bis 13 können unabhängig voneinander für Controller benutzt werden).

Die Lizenz ist unklar, es handelt sich hauptsächlich um Modifikationen und Zusammenstellungen. Der Tetris-Port „Simple Tetris Clone“ ist z.B. unter der MIT-License veröffentlicht, die meisten Bibliotheken unter der (L)GPL.

Version 1 der Library (26.03.2012) 2 der Library (26.07.2012),

getestet auf Arduino Uno: N64Controller

Hier der Quelltext für das Spiel: N64Tetris

Beispielquellcode:

#include <N64Controller.h>
N64Controller player1 (12); // PIN 12
void setup() {
    player1.begin(); // Initialisierung
}
void loop() {
    delay(30);
    player1.update(); // Tastenzustand auslesen
    if (player1.button_A() && player1.button_D_down()
        || player1.button_Start()) { // bitte keinen Sinn suchen
        int xachse = player1.axis_x(); // kann negativ oder positiv sein,
                                   // je nach Ausrichtung des Analog-Sticks
    }
    // …
}

Tags: , ,

3 Responses to “Arduino N64 Controller Library und Tetris-Port”

  1. fmaurer sagt:

    Have you run two instances of the library for two n64 controllers on one arduino before? My microcontroller seems to hang when I try two instances, one on pin 2, the other on pin 5.

    • Profile photo of Kai Kai sagt:

      Can’t confirm, running on Debian (sid) with gcc-avr 4.9 and Arduino IDE 1.5 (experimental):


      #include
      N64Controller player1 (2); // PIN 2
      N64Controller player2 (5); // PIN 5
      void setup() {
      player1.begin(); // Initialisierung
      player2.begin();
      Serial.begin(9600);
      }
      void loop() {
      delay(50);
      player1.update(); // Tastenzustand auslesen
      player2.update();
      if (player1.button_A()) {
      Serial.println("foo");
      }
      if (player2.button_A()) {
      Serial.println("bar");
      }
      Serial.println("l");
      }

Leave a Reply