←
Koder brukt for kontrollpanel, automatgir og USB konvertert logitech (driving force) girskifter laget for gøy og morro. Brukt med Arduino Micro og Arduino IDE.
Benytter https://github.com/MHeironimus/ArduinoJoystickLibrary

Selve stikka (Eaton Fuller S-2588 Roadranger valve assy RTLO 18 speed genuine shifter og 2x selvmonterte hall-sensor magnetiske brytere, tror jeg brukte KY-003 sine sensorer uten pcb):
Logitech Driving Force Shifter:

DJ_Truck_Dash.ino (panelet med brytere fra biltema):
Automatgirboks (M + - D N R) med brytere fra biltema (midlertidige PÅ brytere):
Publisert: 14.aug.2023 11:47 | Oppdatert: 14.aug.2023 12:18.
Arduino
Koder for arduino-basert utstyr til trucksim
Koder brukt for kontrollpanel, automatgir og USB konvertert logitech (driving force) girskifter laget for gøy og morro. Brukt med Arduino Micro og Arduino IDE.
Benytter https://github.com/MHeironimus/ArduinoJoystickLibrary

Selve stikka (Eaton Fuller S-2588 Roadranger valve assy RTLO 18 speed genuine shifter og 2x selvmonterte hall-sensor magnetiske brytere, tror jeg brukte KY-003 sine sensorer uten pcb):
#include <Joystick.h> // GND til digitale pins 2-12 for knappetrykk. // Hardkodet for opptil 11 knapper som burde være nok for det meste. Joystick_ Joystick( 0x03, // hidReportId 0x04, // joystickType 2, // buttonCount 0, // hatSwitchCount false, // includeXAxis false, // includeYAxis false, // includeZAxis false, // includeRxAxis false, // includeRyAxis false, // includeRzAxis false, // includeRudder false, // includeThrottle false, // includeAccelerator false, // includeBrake false // includeSteering ); void setup() { for (int n=2; n<=3; n++) { pinMode(n, INPUT_PULLUP); } Joystick.begin(); } int LastButtonStates[11] = {0}; int TmpButtonState = 0; void loop() { TmpButtonState = 0; for (int n=2; n<=3; n++) { TmpButtonState = digitalRead(n); // Reverse on/off if (TmpButtonState != LastButtonStates[n-2]) { Joystick.setButton(n-2, TmpButtonState); LastButtonStates[n-2] = TmpButtonState; } } delay(50); }
Logitech Driving Force Shifter:
#include <Joystick.h> // 6 gir + revers. int AntallKnapper = 7; // Potmetere på stikke. int X = A0; int Y = A1; // Grenser lest ut via konsoll debugging. int GearPositionsXY[6][2] = { {291, 924}, // 1st {288, 112}, // 2nd {503, 926}, // 3rd {505, 101}, // 4th {699, 945}, // 5th {704, 113} // 6th & R }; int PositionMargin = 50; Joystick_ Joystick( 0x03, // hidReportId 0x04, // joystickType AntallKnapper, // buttonCount 0, // hatSwitchCount false, // includeXAxis false, // includeYAxis false, // includeZAxis false, // includeRxAxis false, // includeRyAxis false, // includeRzAxis false, // includeRudder false, // includeThrottle false, // includeAccelerator false, // includeBrake false // includeSteering ); void setup() { // Bryter i bunn av stikke som avgjør om den er // trykket ned og skal aktivere reverse i HØYRE-NED. pinMode(2, INPUT); Joystick.begin(); /* // DEBUGGING Serial.begin(9600); */ } void loop() { // Revers. Denne har en pull-down resistor siden // stikka bryter oransj mot 5V og tar den HIGH. if ( analogRead(X) >= (GearPositionsXY[5][0]-PositionMargin) && analogRead(Y) <= (GearPositionsXY[5][1]+PositionMargin) && digitalRead(2) == HIGH ) Joystick.setButton(0, 1); else Joystick.setButton(0, 0); // 1st if ( analogRead(X) <= (GearPositionsXY[0][0]+PositionMargin) && analogRead(Y) >= (GearPositionsXY[0][1]-PositionMargin) ) Joystick.setButton(1, 1); else Joystick.setButton(1, 0); // 2nd if ( analogRead(X) <= (GearPositionsXY[1][0]+PositionMargin) && analogRead(Y) <= (GearPositionsXY[1][1]+PositionMargin) ) Joystick.setButton(2, 1); else Joystick.setButton(2, 0); // 3rd if ( analogRead(X) <= (GearPositionsXY[2][0]+PositionMargin) && analogRead(X) >= (GearPositionsXY[2][0]-PositionMargin) && // Rundt 500 et sted. analogRead(Y) >= (GearPositionsXY[2][1]-PositionMargin) ) Joystick.setButton(3, 1); else Joystick.setButton(3, 0); // 4th if ( analogRead(X) <= (GearPositionsXY[3][0]+PositionMargin) && analogRead(X) >= (GearPositionsXY[3][0]-PositionMargin) && // Rundt 500 et sted. analogRead(Y) <= (GearPositionsXY[3][1]+PositionMargin) ) Joystick.setButton(4, 1); else Joystick.setButton(4, 0); // 5th if ( analogRead(X) >= (GearPositionsXY[4][0]-PositionMargin) && analogRead(Y) >= (GearPositionsXY[4][1]-PositionMargin) ) Joystick.setButton(5, 1); else Joystick.setButton(5, 0); // 6th if ( analogRead(X) >= (GearPositionsXY[5][0]-PositionMargin) && analogRead(Y) <= (GearPositionsXY[5][1]+PositionMargin) && digitalRead(2) == LOW ) Joystick.setButton(6, 1); else Joystick.setButton(6, 0); /* // DEBUGGING // Les ut X og Y akse for å debugge girposisjonsverdier. Serial.print("X akse: "); Serial.print(analogRead(X)); Serial.print(", Y akse: "); Serial.println(analogRead(Y)); */ delay(10); }

DJ_Truck_Dash.ino (panelet med brytere fra biltema):
#include <Joystick.h> int AntallKnapper = 17; Joystick_ Joystick( 0x03, // hidReportId 0x04, // joystickType AntallKnapper, // buttonCount 0, // hatSwitchCount false, // includeXAxis false, // includeYAxis false, // includeZAxis false, // includeRxAxis false, // includeRyAxis false, // includeRzAxis false, // includeRudder false, // includeThrottle false, // includeAccelerator false, // includeBrake false // includeSteering ); void setup() { // Alle brytere unntatt START holdes i HIGH modus. // Siden arduino har intern pullup resistor, er det praktisk å gjøre det slik. pinMode(2, INPUT_PULLUP); // JAKE pinMode(3, INPUT_PULLUP); // JAKE OPP pinMode(4, INPUT_PULLUP); // JAKE NED pinMode(5, INPUT_PULLUP); // PARK pinMode(6, INPUT_PULLUP); // TRAILER pinMode(7, INPUT_PULLUP); // LIGHTS pinMode(8, INPUT_PULLUP); // HIGH BEAM pinMode(9, INPUT_PULLUP); // BEACON pinMode(10, INPUT_PULLUP); // HAZARDS pinMode(11, INPUT_PULLUP); // LIFT AXLE TRACTOR pinMode(12, INPUT_PULLUP); // LIFT AXLE TRAILER pinMode(A5, INPUT_PULLUP); // LOCK DIFF pinMode(A4, INPUT_PULLUP); // VINDU H NED pinMode(A3, INPUT_PULLUP); // VINDU H OPP pinMode(A2, INPUT_PULLUP); // VINDU L NED pinMode(A1, INPUT_PULLUP); // VINDU L OPP // A0 er koblet til GND via en 10K resistor for pulldown slik at den holder seg i LOW status. // Da kan vi koble +5V til bryter slik at den lyser rødt, og benytte at A0 da går i HIGH modus. pinMode(A0, INPUT); // START Joystick.begin(); } void loop() { // START. // Denne har LOW når den er av, så vi leser vanlig. Joystick.setButton(0, digitalRead(A0)); // Alle de andre. // Disse har HIGH når de er av, vi leser derfor !(motsatt). Joystick.setButton(1, !digitalRead(2)); Joystick.setButton(2, !digitalRead(3)); Joystick.setButton(3, !digitalRead(4)); Joystick.setButton(4, !digitalRead(5)); Joystick.setButton(5, !digitalRead(6)); Joystick.setButton(6, !digitalRead(7)); Joystick.setButton(7, !digitalRead(8)); Joystick.setButton(8, !digitalRead(9)); Joystick.setButton(9, !digitalRead(10)); Joystick.setButton(10, !digitalRead(11)); Joystick.setButton(11, !digitalRead(12)); Joystick.setButton(12, !digitalRead(A1)); Joystick.setButton(13, !digitalRead(A2)); Joystick.setButton(14, !digitalRead(A3)); Joystick.setButton(15, !digitalRead(A4)); Joystick.setButton(16, !digitalRead(A5)); delay(50); }
Automatgirboks (M + - D N R) med brytere fra biltema (midlertidige PÅ brytere):
#include <Joystick.h> // GND til digitale pins 2-12 for knappetrykk. int AntallKnapper = 6; Joystick_ Joystick( 0x03, // hidReportId 0x04, // joystickType AntallKnapper, // buttonCount 0, // hatSwitchCount false, // includeXAxis false, // includeYAxis false, // includeZAxis false, // includeRxAxis false, // includeRyAxis false, // includeRzAxis false, // includeRudder false, // includeThrottle false, // includeAccelerator false, // includeBrake false // includeSteering ); void setup() { for (int n=2; n<=AntallKnapper+1; n++) { pinMode(n, INPUT_PULLUP); } Joystick.begin(); } int LastButtonStates[11] = {0}; int TmpButtonState = 0; void loop() { TmpButtonState = 0; for (int n=2; n<=AntallKnapper+1; n++) { TmpButtonState = !digitalRead(n); if (TmpButtonState != LastButtonStates[n-2]) { // Hold R D aktivert hvis de blir trykket på. if (TmpButtonState == 0 && (n==2 || n==6)) { TmpButtonState = LastButtonStates[n-2]; } // Overstyr R D aktive statuser hvis R N D blir trykket. if (TmpButtonState != 0 && n==2) { Joystick.setButton(6-2, 0); LastButtonStates[6-2] = 0; } if (TmpButtonState != 0 && n==6) { Joystick.setButton(2-2, 0); LastButtonStates[2-2] = 0; } if (TmpButtonState != 0 && n==7) { Joystick.setButton(2-2, 0); Joystick.setButton(6-2, 0); LastButtonStates[2-2] = 0; LastButtonStates[6-2] = 0; } // Oppdater knappestatus. Joystick.setButton(n-2, TmpButtonState); LastButtonStates[n-2] = TmpButtonState; } } delay(50); }
Publisert: 14.aug.2023 11:47 | Oppdatert: 14.aug.2023 12:18.
Arduino