Guten Morgen
Ich habe ein paar Gamecontroler gebastelt, welche auch gut funktionieren. Einziges Problem, das Spiel bekommt nicht alle Aktionen mit, obwohl sie im Gamecontroller Controlpanel von Windows angezeigt werden. Der Gamecontroller besteht aus mehreren Rotary Switchen welche viele Positionen haben. Beim Umschalten überspringt man mehrere Positionen und das sorgt dafür, das der Simulator nicht alles mit macht.
Verwenden tue ich die Joystick Library von MHeironimus
Die Idee ist es die Zeit zu messen wie lange der Schalter in Position X ist und wenn er lange genug dort ist, dann ensprechend den button zu drücken.
Dazu habe ich folgenden Code geschrieben, der prüft ob der Pin 50ms auf Gnd gezogen wurde und wenn ja dann den Button entsprechend High oder Low setzen soll. Nun es tut sich aber garnichts.
Füge ich Serialpriont hinzu, dann bekomme ich die Ausgabe entsprechend aber komischerweise
funktioniert der Joystick nicht.
Habt ihr eine Idee, wie ich nonsense Input unterdrücken kann oder wo mein Fehler liegt?
#include <Joystick.h>
const int pin9 = 9;
unsigned long previousMillis = 0;
const long interval = 250;
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,JOYSTICK_TYPE_GAMEPAD,
1, 0, // Button Count, Hat Switch Count
false, false, false, // No X, Y and Z Axis
false, false, false, // No Rx, Ry, or Rz
false, false, // No rudder or throttle
false, false, false); // accelerator and brake, but No steering
void setup() {
Serial.begin(9600);
pinMode(pin9, INPUT_PULLUP);
}
void loop() {
// Aktuelle Millisekunde abrufen
unsigned long currentMillis = millis();
// Zustand von Pin 9 überprüfen
if (digitalRead(pin9) == LOW) {
// Wenn Pin 9 LOW ist, die vorherige Millisekunde aktualisieren
previousMillis = currentMillis;
}
// Überprüfen, ob das Zeitintervall von 50 Millisekunden vergangen ist
if (currentMillis - previousMillis >= interval) {
Serial.println("Button 1 nicht gedrückt");
Joystick.setButton(1, 0);
} else {
Serial.println("Button 1 gedrückt");
Joystick.setButton(0, 1);
}
delay(10);
}