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?