Hola! Soy nueva en esto, así que sepan disculpar si escogí mal la temática para realizar la publicación, pero estaría necesitando ayuda con mi proyecto: un volante, dos pedales (acelerador y freno) y dos botones (subir marcha y bajar marcha) hechos con potenciómetros (a excepción de los botones de las marchas, que están hechos con pulsadores), y utilizando una placa Arduino Leonardo para realizar la comunicación con la computadora. Todo ello para crear un volante con pedales y cambios para un simulador de carreras.
Estoy usando el Assetto Corsa como juego, conecté la placa junto con los potenciómetros y los pulsadores, utilicé la librería ArduinoJoystick (adjunto link: ArduinoJoystick library) de GitHub e hice el siguiente código:
#include <Joystick.h>
const int pedalAceleradorPin = A0; // Potenciómetro para el acelerador
const int pedalFrenoPin = A1; // Potenciómetro para el freno
const int volantePotPin = A3; // Potenciómetro para el volante
int valorInicialVolante = 511; // Punto medio (se ajustará en setup)
// Constant that maps the phyical pin to the joystick button.
const int pinToButtonMap = 9;
// Last state of the button
int lastButtonState[4] = {0,0,0,0};
void setup() {
Serial.begin(9600);
pinMode(9, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
pinMode(11, INPUT_PULLUP);
pinMode(12, INPUT_PULLUP);
// Inicializar el joystick
Joystick.begin();
// Leer el valor inicial del potenciómetro del volante y guardarlo como referencia de centro
valorInicialVolante = analogRead(volantePotPin);
}
void loop() {
freno();
acelerador();
volante();
// Read pin values
for (int index = 0; index < 4; index++)
{
int currentButtonState = !digitalRead(index + pinToButtonMap);
if (currentButtonState != lastButtonState[index])
{
Joystick.setButton(index, currentButtonState);
lastButtonState[index] = currentButtonState;
}
}
delay(100); // Pequeño retraso para estabilidad
}
void freno(){
// Leer el valor del freno (0-1023)
int valorFreno = analogRead(pedalFrenoPin);
int valorFrenoMapped = map(valorFreno, 0, 1023, 0, 255);
Joystick.setZAxis(valorFrenoMapped); // Freno
}
void acelerador(){
// Leer el valor del acelerador (0-1023)
int valorAcelerador = analogRead(pedalAceleradorPin);
int valorAceleradorMapped = map(valorAcelerador, 0, 1023, 0, 255);
Joystick.setThrottle(valorAceleradorMapped); // Acelerador
}
void volante(){
// Leer el valor del volante
int valorVolante = analogRead(volantePotPin);
int valorAjustado = valorVolante - valorInicialVolante;
// Mapear el valor ajustado al rango de 0 a 255 para el joystick
int valorVolanteMapped = map(valorVolante, 0, 1023, 0, 255);
Joystick.setXAxis(valorVolanteMapped); // Volante
}
Luego abro el juego, configuro los controles y empiezo a jugar. Al principio andaba todo bien, pero luego de unas horas empezó a fallar. El volante no doblaba o a veces cuando aceleraba se activaban de forma repentina otros controles, por ejemplo el freno. Luego de seguir intentando y probar repetidas veces, los controles en el juego ya ni siquiera responden.
Para verificar que no sean errores de mapeo o de mis potenciómetros le agregué un monitor serial al código (no es el que subí anteriormente, lo hice aparte) para poder ver los valores en los que estaba trabajando y me dan todos bien, sin fallas. También probé utilizar otro puerto USB y pasa lo mismo, al principio anda bien y luego falla hasta dejar de responder completamente en el juego.
¿Alguien sabe si es error del juego o de código o de qué?, porque ya no se de dónde puede venir este problema ni como solucionarlo. Desde ya, muchas gracias.