Bonjour,
j'ai modifié un Shifter Fanatec SQ 1.5 en enlevant les capteurs Hall et en les remplaçant par des microswitches, pilotés par une Arduino Pro Micro.
ça fonctionnait très bien.
J'ai voulu utiliser les pins restant pour commander des boutons, sans resistances, en utilisant PULLUP. Ca marche très bien pour les pins 14-16, pas du tout pour 18-21 (= A0-A3).
je ne comprends pas pourquoi. en les appelant par le pin 18 ou par A0, ça ne change rien...
testé pinMode(18, INPUT_PULLUP) et pinMode(A0, INPUT) et le code actuel... idem.
j'ai vu ce sujethttps://forum.arduino.cc/t/cant-manage-to-get-pro-micro-pins-a0-a2-to-act-as-digital-outputs/1239147 mais je n'ai pas accès à ce matériel.
Y a t il une solution autre ?
il n'y a pas de matrice, et je ne souhaite pas en faire. les boutons sont cablés directement chacun à la carte.
soudures et contacts vérifiés. boutons aussi. problème dans le code ou la manière de faire ...
Merci.
mon code
// Fanatec shifter mod
#include <Joystick.h>
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID, JOYSTICK_TYPE_GAMEPAD,
18, 0, // Button Count, Hat Switch Count
false, false, false, // No X and Y Z Axis
false, false, false, // No Rx, Ry, or Rz
false, false, // No rudder or throttle
false, false, false); // No accelerator, brake, or steering
//************
void setup() {
// switch off RX TX leds
pinMode(LED_BUILTIN_TX, INPUT);
pinMode(LED_BUILTIN_RX, INPUT);
// Initialize Joystick Library
Joystick.begin();
// Initialize Button Pins for windows butons
// Speed shifter position R 1 2 3 4 5 6 7 Upshift DnShift H/Seq // extra btns 1 2 3 4 5 6 7
// Arduino Btn 7 0 1 2 3 4 5 6 8 9 10 // 14 15 16 18 19 20 21 not 11 12 13 17
// Windows Btn 8 1 2 3 4 5 6 7 9 10 11 12 13 14 15 16 17 18
// for arduino leonardo and micro only
for (int i = 0; i <= 10; i++){
pinMode(i, INPUT_PULLUP);
}
for (int i = 14; i <= 16; i++){
pinMode(i, INPUT_PULLUP);
}
//for (int i = 18; i <= 21; i++){
pinMode(A0, INPUT_PULLUP);
pinMode(A1, INPUT_PULLUP);
pinMode(A2, INPUT_PULLUP);
pinMode(A3, INPUT_PULLUP);
//}
// test only **************
//Serial.begin(9600); //This pipes to the serial monitor
}
//***********
boolean ShifterMode;
boolean currentButtonState;
boolean lastButtonState[18] = { LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH, LOW, LOW, LOW, LOW, LOW, LOW, LOW};
// max btn inputs = 18
void UpdateButton(byte i) {
currentButtonState = !digitalRead(i);
if (currentButtonState != lastButtonState[i]) {
Joystick.setButton(i, currentButtonState);
lastButtonState[i] = currentButtonState;
}
}
//***********
void loop() {
// Read pin values
for (byte i = 14; i <= 16; i++){
UpdateButton(i);
}
//for (byte i = 18; i <= 21; i++){
//UpdateButton(i);
currentButtonState = !digitalRead(A0);
if (currentButtonState != lastButtonState[18]) {
Joystick.setButton(18, currentButtonState);
lastButtonState[18] = currentButtonState;
}
currentButtonState = !digitalRead(A1);
if (currentButtonState != lastButtonState[19]) {
Joystick.setButton(19, currentButtonState);
lastButtonState[19] = currentButtonState;
}
currentButtonState = !digitalRead(A2);
if (currentButtonState != lastButtonState[20]) {
Joystick.setButton(20, currentButtonState);
lastButtonState[20] = currentButtonState;
}
currentButtonState = !digitalRead(A3);
if (currentButtonState != lastButtonState[21]) {
Joystick.setButton(21, currentButtonState);
lastButtonState[21] = currentButtonState;
}
//}
ShifterMode = digitalRead(10); // read pin 10 if gnded H mode
Joystick.setButton(10, ShifterMode);
if (ShifterMode == 1) {
//Serial.println("Mode SEQ");
for (byte i = 8; i <= 9; i++){
// seq mode, btn 8 and 9 for Upshift DnShift Speed 3 and 4
UpdateButton(i);
}
} else {
//Serial.println("Mode H");
for (byte i = 0; i <= 7; i++){
//H mode btn 7 is Reverse and bnts 0 to 6 gears
UpdateButton(i);
}
}
delay(50);
}