Spørgsmål:
Brug en gammel Nintendo NES-controller som en inputenhed
littlebirdceo
2009-11-02 10:18:55 UTC
view on stackexchange narkive permalink

Har nogen et pinout-diagram til Nintendo NES-controlleren? Jeg vil gerne tilslutte NES-controlleren til en Arduino.

medmindre du vil prøve at hente parringsstikket til det usædvanlige NES-stik, hvorfor bekymre dig om pinout? Jeg ville sandsynligvis afskære det originale stik og udskifte det med en DB-9 og tilslutte det, så det passer.
Fire svar:
#1
+7
Andrew S. Parnell
2009-11-07 04:08:34 UTC
view on stackexchange narkive permalink

NES Pad-biblioteket har ikke kun en pinout, men er en god arduino-klasse til brug af NES-controlleren.

#2
+6
davr
2009-11-03 00:00:04 UTC
view on stackexchange narkive permalink

Her er en anden side med nyttige oplysninger, herunder et signaldiagram.

  + ---- > Power (hvid) | 5 + ---- ----- + 7 | x x o \ | o o o o | 4 + ------------ + 1 | | | | | | | + -> Jord (brun) | | + ---- > Pulse (rød) | + ------- > Latch (orange) + ---------- > Data (gul)  
#3
+6
Michael Eakins
2010-11-04 05:30:13 UTC
view on stackexchange narkive permalink

Jeg fandt en god artikel om Hack-A-Day, der gentog din søgen. Denne artikel handler om grænseflade mellem SNES-controlleren og en Android, der bruger en Arduino. For at spare dig for besværet med at gennemsøge artiklen fandt jeg den sammenkædede kode, de citerede:

Denne kode bruger en old-school 1980'ers NES-controller til at styre en servo og en LED med Arduino. Med denne kode drejer 'op' pad en servo til 180 grader, 'højre' drejer den til 90 og 'ned' drejer den til 0 grader. A- og B-knapperne tænder og slukker også for en LED. Du kan få en NES-controller fra ebay til mindre end $ 10,00. Her er en rå tegning af controller-stikket, fire huller på den ene side, tre huller på den anden.


 0 - 0v (jorden ) + 5V --- 0 0 --LOCK intet --- 0 0 --LATCH intet --- 0 0 --SERIAL OUT 

Du kan bare stikke ledninger i controllerens stikhuller til prototyping. +5 er forbundet til Arduino +5 Ground til Arduino Ground Latch går til pin 2 (med denne kode) Ur til pin 3 Seriel ud til pin 4

Servodatalinjen er forbundet til pin 10, og lysdioden lyser på ben 11.

Hvis du vil se controllerens input på den serielle skærm, skal du bare åbne den serielle skærm. Det viser dig de binære tal, der kommer ind fra controlleren. Hver knap har sit eget binære tal. 'Op' er for eksempel 11110111. Jeg inkluderede en // skjult Serial.println-kode, der viser "Knap er blevet trykket", hvis du trykker på startknappen. Slet bare '//', hvis du vil bruge det. SNES-stikket er anderledes, du er interesseret i, at du bliver nødt til at kigge et andet sted efter uret, låsen, seriel ud-info.

Citat :

  / * INITIALISERING * / # inkluderer <ServoTimer1.h>ServoTimer1 servo1; int latch = 2; // indstil låsen pinint uret = 3; // indstil urstiften
int datin = 4; // indstil dataene i pinbyte 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.achach (10);} / * DENNE LÆSER DATA FRA CONTROLLER * / ugyldig controllerLæs () {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, LAV);}} / * LED-, SERVO- OG SERIALMONITORPROGRAM * / ugyldig sløjfe () {controllerRead (); Serial.println (controller_data, BIN); // if (controller_data == B11101111) {// Serial. println ("Der er blevet trykket på knappen"); //} andet {//Serial.println("Knap ikke trykket "); //} // til REFERENCE: // OP = 11110111 // NED = 11111011 // VENSTRE = 11111101 // HØJRE = 11111110 // VÆLG = 11011111 // START = 11101111 // A = 01111111 // B = 10111111if (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);} forsinkelse (100);}  

Arduino SNES Instruerbar



Denne spørgsmål og svar blev automatisk oversat fra det engelske sprog.Det originale indhold er tilgængeligt på stackexchange, som vi takker for den cc by-sa 2.0-licens, den distribueres under.
Loading...