Obteniendo lecturas extrañas de un multiplexor

0

Estoy intentando construir un controlador de gamepad simple para aprender más sobre los multiplexores (en este caso, un SN74LS251 . Así es como lo estoy cableando:

Yesteeselcódigoqueestoyusandoparaobtenerlosestadosdelbotón:

//Pins.unsignedinty=8;unsignedinta=9;unsignedintb=10;unsignedintc=11;//Gamepadstates.unsignedintgamepad[2][4];/***TheusualArduinosetup.*/voidsetup(){//Setpinmodes.pinMode(y,INPUT);pinMode(a,OUTPUT);pinMode(b,OUTPUT);pinMode(c,OUTPUT);//SetselectpinsLOW.digitalWrite(a,LOW);digitalWrite(b,LOW);digitalWrite(c,LOW);//BegintheSerialconnectionfordebugging.Serial.begin(9600);}/***Settheselectpinsinthemultiplexer.**@parama_sttSelectpinAstate.*@paramb_sttSelectpinBstate.*@paramc_sttSelectpinCstate.*/voidmultiplex_set(unsignedinta_stt,unsignedintb_stt,unsignedintc_stt){digitalWrite(a,a_stt);digitalWrite(b,b_stt);digitalWrite(c,c_stt);}/***GetalltheGamepadstatesandputthemintotheresultarray.*/voidget_gamepad_states(){//LeftGamepad.multiplex_set(LOW,LOW,LOW);gamepad[0][0]=digitalRead(y);multiplex_set(HIGH,LOW,LOW);gamepad[0][1]=digitalRead(y);multiplex_set(LOW,HIGH,LOW);gamepad[0][2]=digitalRead(y);multiplex_set(HIGH,HIGH,LOW);gamepad[0][3]=digitalRead(y);//RightGamepad.multiplex_set(LOW,LOW,HIGH);gamepad[1][0]=digitalRead(y);multiplex_set(HIGH,LOW,HIGH);gamepad[1][1]=digitalRead(y);multiplex_set(LOW,HIGH,HIGH);gamepad[1][2]=digitalRead(y);multiplex_set(HIGH,HIGH,HIGH);gamepad[1][3]=digitalRead(y);}/***TheusualArduinoloop.*/voidloop(){get_gamepad_states();for(unsignedinti=0;i<2;i++){if(i==0){Serial.println("LEFT");
    } else {
      Serial.println("RIGHT");
    }

    Serial.print("  Up: ");
    Serial.println(gamepad[i][0]);
    Serial.print("  Right: ");
    Serial.println(gamepad[i][1]);
    Serial.print("  Down: ");
    Serial.println(gamepad[i][2]);
    Serial.print("  Left: ");
    Serial.println(gamepad[i][3]);
    Serial.println("");
  }

  delay(500);
}

Estaba funcionando la semana pasada cuando lo probé por primera vez, pero cuando fui a reconstruirlo hoy, empecé a recibir lecturas extrañas (y completamente incorrectas) como estas (no se presionaron botones durante esta prueba y aún tengo algunas ALTAS sin motivo):

LEFT
  Up: 0
  Right: 0
  Down: 0
  Left: 0

RIGHT
  Up: 0
  Right: 0
  Down: 0
  Left: 1

LEFT
  Up: 0
  Right: 0
  Down: 0
  Left: 0

RIGHT
  Up: 0
  Right: 0
  Down: 0
  Left: 0

LEFT
  Up: 0
  Right: 0
  Down: 0
  Left: 0

RIGHT
  Up: 0
  Right: 0
  Down: 0
  Left: 0

También si presiono un botón no pasa nada. Incluso si pongo el pin Habilitar ALTO, seguiré teniendo el mismo patrón. ¿Qué pasa?

    
pregunta Nathan Campos

1 respuesta

2

Parece que hay problemas de conexión con tu placa de pruebas: -

¿No debería un lado de cada interruptor estar (por ejemplo) a 0 V mientras que el otro lado tiene un pull-up?

    
respondido por el Andy aka

Lea otras preguntas en las etiquetas