Use un antiguo controlador Nintendo NES como dispositivo de entrada

6

¿Alguien tiene un diagrama de pines para el controlador Nintendo NES? Me gustaría conectar el controlador NES a un Arduino.

    
pregunta littlebirdceo

4 respuestas

5

PinoutsGuide tiene una página Nintendo NES y SNES pinstick controlador pin .

    
respondido por el jkopel
7

La NES Pad library no solo tiene un pinout, sino que es una excelente clase de arduino para usar el controlador NES.

    
respondido por el Andrew S. Parnell
6

Aquí hay otra página con información útil , incluido un diagrama de señales.

          +----> Power  (white)
          |
5 +---------+  7    
  | x  x  o   \     
  | o  o  o  o |    
4 +------------+ 1  
    |  |  |  |
    |  |  |  +-> Ground (brown)
    |  |  +----> Pulse  (red)
    |  +-------> Latch  (orange)
    +----------> Data   (yellow)
    
respondido por el davr
6

Encontré un excelente artículo en Hack-A- Día sobre tu búsqueda. Este artículo trata sobre la interfaz del controlador SNES con un Android que utiliza un Arduino. Para ahorrarle algunos de los problemas de revisar el artículo, encontré el código vinculado que citaron:

  

Este código utiliza una vieja escuela de 1980   Controlador NES para controlar un servo y   Un LED con el Arduino. Con este   código, el pad 'up' convierte un servo en   180 grados, 'derecha' lo convierte en 90,   y 'abajo' lo convierte a 0 grados.   Además, los botones A y B encienden un LED.   encendido y apagado. Puedes conseguir una NES   controlador de eBay por menos de   $ 10.00 Aquí hay un dibujo crudo de la   Enchufe del controlador, cuatro orificios en uno   Lado, tres agujeros en el otro.

     
                       0     --  0v (ground)
      +5V  ---  0      0     --CLOCK   
  nothing  ---  0      0     --LATCH  
  nothing  ---  0      0     --SERIAL OUT 
     

Usted solo puede pegar cables en el   Orificios de conexión del controlador para prototipado.   El +5 está conectado al Arduino +5.   Tierra a Arduino Ground Latch va a   Pin 2 (con este código) Reloj a Pin 3   Serial Out to Pin 4

     

La línea de datos servo está conectada a   Pin 10, y el LED está en Pin 11.

     

Si quieres ver el controlador   entrada en el monitor de serie y luego solo   Abra el monitor serie. Va a   Te mostramos los números binarios que son   Entrando desde el controlador. Cada   El botón tiene su propio número binario.   'Arriba' es 11110111, por ejemplo. yo   incluye un // Serial.println oculto   Código que mostrará "El botón tiene   presionado "si presionas hacia abajo el   botón de inicio. Solo borra el '//' si   quieres usar eso El enchufe SNES   es diferente, te interesa   que tendrás que buscar en otro lado   para el reloj, pestillo, información de salida de serie.

     

Cita:

/* 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);
}

Instructivo Arduino SNES

    
respondido por el Michael Eakins

Lea otras preguntas en las etiquetas