Hat jemand ein Pinbelegungsdiagramm für den Nintendo NES Controller? Ich möchte den NES-Controller mit einem Arduino verbinden.
Hat jemand ein Pinbelegungsdiagramm für den Nintendo NES Controller? Ich möchte den NES-Controller mit einem Arduino verbinden.
Antworten:
PinoutsGuide hat eine Seite Nintendo NES und SNES Joystick Controller Pinbelegung .
Die NES-Pad-Bibliothek verfügt nicht nur über eine Pinbelegung, sondern ist auch eine hervorragende Arduino-Klasse für die Verwendung des NES-Controllers.
Hier ist eine weitere Seite mit hilfreichen Informationen , einschließlich eines Signaldiagramms.
+----> Power (white)
|
5 +---------+ 7
| x x o \
| o o o o |
4 +------------+ 1
| | | |
| | | +-> Ground (brown)
| | +----> Pulse (red)
| +-------> Latch (orange)
+----------> Data (yellow)
Ich habe einen großartigen Artikel über Hack-A-Day gefunden, in dem es um Ihre Suche geht. Dieser Artikel befasst sich mit der Verbindung des SNES-Controllers mit einem Android unter Verwendung eines Arduino. Um Ihnen die Mühe zu ersparen, den Artikel zu sichten, habe ich den verknüpften Code gefunden, den sie zitiert haben:
Dieser Code verwendet einen NES-Controller der 1980er Jahre, um ein Servo und eine LED mit dem Arduino zu steuern. Mit diesem Code dreht das 'up'-Pad ein Servo um 180 Grad,' right 'dreht es auf 90 und' down 'dreht es auf 0 Grad. Außerdem schalten die Tasten A und B eine LED ein und aus. Sie können einen NES-Controller bei ebay für weniger als 10,00 USD erwerben. Hier ist eine grobe Zeichnung des Controller-Steckers, vier Löcher auf der einen Seite, drei Löcher auf der anderen.
0 - 0 V (Masse) + 5V --- 0 0 --UHR nichts --- 0 0 --LATCH nichts --- 0 0 --SERIAL OUT
Sie können für das Prototyping einfach Drähte in die Steckerlöcher des Controllers stecken. Die +5 ist mit der Arduino +5 Masse verbunden. Die Arduino-Erdungsverriegelung geht an Pin 2 (mit diesem Code). Takt an Pin 3 Serial Out an Pin 4
Die Servodatenleitung ist an Pin 10 angeschlossen und die LED leuchtet an Pin 11.
Wenn Sie den Controller-Eingang auf dem seriellen Monitor sehen möchten, öffnen Sie einfach den seriellen Monitor. Es zeigt Ihnen die Binärzahlen, die vom Controller eingehen. Jede Taste hat eine eigene Binärzahl. 'Up' ist zum Beispiel 11110111. Ich habe einen // versteckten Serial.println-Code eingefügt, der "Taste wurde gedrückt" anzeigt, wenn Sie die Starttaste drücken. Löschen Sie einfach das '//', wenn Sie das verwenden möchten. Der SNES-Stecker ist anders. Sie sind daran interessiert, dass Sie an anderer Stelle nach Informationen zu Uhr, Verriegelung und seriellem Ausgang suchen müssen.
Zitat:
/* INITIALIZATION */ #include <ServoTimer1.h> ServoTimer1 servo1; int latch = 2; // set the latch pin int clock = 3; // set the clock pin int datin = 4;// set the data in pin byte controller_data = 0; int ledpin = 11; /* SETUP */ void setup() { Serial.begin(57600); pinMode(latch,OUTPUT); pinMode(clock,OUTPUT); pinMode(datin,INPUT); pinMode(ledpin, OUTPUT); digitalWrite(latch,HIGH); digitalWrite(clock,HIGH); servo1.attach(10); } /* THIS READS DATA FROM THE CONTROLLER */ void controllerRead() { controller_data = 0; digitalWrite(latch,LOW); digitalWrite(clock,LOW); digitalWrite(latch,HIGH); delayMicroseconds(2); digitalWrite(latch,LOW); controller_data = digitalRead(datin); for (int i = 1; i <= 7; i ++) { digitalWrite(clock,HIGH); delayMicroseconds(2); controller_data = controller_data << 1; controller_data = controller_data + digitalRead(datin) ; delayMicroseconds(4); digitalWrite(clock,LOW); } } /* THE LED, SERVO, AND SERIAL MONITOR PROGRAM */ void loop() { controllerRead(); Serial.println(controller_data, BIN); // if (controller_data==B11101111){ // Serial.println("Button has been Pressed"); //} else { //Serial.println("Button not pressed"); //} //for REFERENCE: //UP = 11110111 //DOWN=11111011 //LEFT=11111101 //RIGHT=11111110 //SELECT=11011111 //START=11101111 //A=01111111 //B=10111111 if (controller_data==B01111111){ digitalWrite(ledpin, HIGH); } if (controller_data==B10111111){ digitalWrite(ledpin, LOW); } if (controller_data==B11110111){ servo1.write(180); } if (controller_data==B11111011){ servo1.write(0); } if (controller_data==B11111110){ servo1.write(90); } delay(100); }