Salut je cherche comment connecter des servo moteur 270© et led pour les clignotants et voyant température et essence connecter sur une Arduino Uno j'ai déjà mis le protocole simhub et mis un code teste pour tester les moteurs et la je bloque pour activer les aiguille en fonction du jeu si vous pouvez m'aider
je vais vous mettre tout les branchements et code en dessous .
Protocole simhub
format([DataCorePlugin.GameData.NewData.SpeedKmh],'0') + ';' +
isnull([DataCorePlugin.GameData.NewData.Rpms],'0') + ';' +
isnull([DataCorePlugin.Computed.Fuel_Percent],'0') + ';' +
isnull([DataCorePlugin.GameData.NewData.WaterTemperature],'0') + ';' +
isnull([TurnIndicatorLeft],'0') + ';' +
isnull([TurnIndicatorRight],'0') + ';'
Branchement Arduino/
LEDs :
Pin 2 → Cligno gauche
Pin 3 → Cligno droit
Pin 4 → Voyant essence (réserve)
Pin 5 → Voyant température
Servos :
Pin 8 → Vitesse (Km/h)
Pin 9 → RPM
Pin 10 → Essence
Pin 11 → Température
Code teste Arduino
#include <Servo.h>
// --- LEDs (voyants) ---
const int ledClignoGauche = 2;
const int ledClignoDroite = 3;
const int ledEssence = 4; // Réserve
const int ledTemp = 5; // Surchauffe
// --- Servos ---
Servo servoVitesse;
Servo servoRPM;
Servo servoEssence;
Servo servoTemp;
// --- Plages servos ---
int speedMinServo = 10;
int speedMaxServo = 210;
int rpmMinServo = 0;
int rpmMaxServo = 7500;
int fuelMinServo = 0;
int fuelMaxServo = 55;
int tempMinServo = 0;
int tempMaxServo = 55;
// --- Variables pour lissage ---
float displaySpeed = speedMinServo;
float displayRPM = rpmMinServo;
float displayFuel = fuelMinServo;
float displayTemp = tempMinServo;
// --- Vitesse de lissage (plus grand = plus lent) ---
float smoothFactor = 20.0;
// --- Clignotants ---
bool clignoState = false;
unsigned long lastClignoToggle = 0;
const unsigned long clignoInterval = 500;
// --- Direction de test (monte/descend) ---
int direction = 1;
void setup() {
servoVitesse.attach(8);
servoRPM.attach(9);
servoEssence.attach(10);
servoTemp.attach(11);
pinMode(ledClignoGauche, OUTPUT);
pinMode(ledClignoDroite, OUTPUT);
pinMode(ledEssence, OUTPUT);
pinMode(ledTemp, OUTPUT);
}
void loop() {
// --- RPM et km/h synchronisés ---
float targetSpeed = direction > 0 ? speedMaxServo : speedMinServo;
float targetRPM = direction > 0 ? rpmMaxServo : rpmMinServo;
displaySpeed += (targetSpeed - displaySpeed) / smoothFactor;
displayRPM += (targetRPM - displayRPM) / smoothFactor;
if(abs(displaySpeed - targetSpeed) < 1.0) direction *= -1;
servoVitesse.write(displaySpeed);
servoRPM.write(displayRPM);
// --- Essence et température ---
float targetFuel = direction > 0 ? fuelMaxServo : fuelMinServo;
float targetTemp = direction > 0 ? tempMaxServo : tempMinServo;
displayFuel += (targetFuel - displayFuel) / smoothFactor;
displayTemp += (targetTemp - displayTemp) / smoothFactor;
servoEssence.write(displayFuel);
servoTemp.write(displayTemp);
// --- Voyants ---
digitalWrite(ledEssence, displayFuel <= fuelMinServo ? HIGH : LOW);
digitalWrite(ledTemp, displayTemp >= tempMaxServo ? HIGH : LOW);
// --- Clignotants ---
unsigned long currentMillis = millis();
if(currentMillis - lastClignoToggle >= clignoInterval){
clignoState = !clignoState;
digitalWrite(ledClignoGauche, clignoState ? HIGH : LOW);
digitalWrite(ledClignoDroite, clignoState ? HIGH : LOW);
lastClignoToggle = currentMillis;
}
delay(30); // fluidité
}