Bonjour
J'ai commencé a fabriquer un indicateur de rapport engagé pour un ami qui fait du rallye. Pour ce faire, je dois réaliser je mesure la vitesse de rotation du moteur, ainsi que la vitesse de rotation des roues. En soit cela fonction, mais les monté en régime sont trop rapide et le temps que l'arduino mesure a vitesse de rotation du moteur, la vitesse de rotation des roues a déjà trop évoluer. L'arduino se mélange les pédales au moment d'afficher le rapport engagé.
voila le programme, il est pas ultra optimiser
const byte PIN_SIGNAL = 2;
unsigned long ttotale;
float RPMM;
float RPMC;
float RCM;
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(10, INPUT);
pinMode(11, INPUT);
Serial.begin(9600);
digitalWrite(13, LOW);
digitalWrite(8, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(6, HIGH);
digitalWrite(5, HIGH);
digitalWrite(8, HIGH);
}
void loop() {
// Mesure la durée de l'impulsion haute et basse MOTEUR
noInterrupts();
unsigned long t1 = pulseIn(10, HIGH,500);
unsigned long t2 = pulseIn(10, LOW,500);
interrupts();
// Mesure la durée de l'impulsion haute et basse CARDAN
noInterrupts();
unsigned long t3 = pulseIn(11, HIGH,500);
unsigned long t4 = pulseIn(11, LOW,500);
interrupts();
//transformation de la periode en frequence MOTEUR
ttotale=t1+t2;
RPMM=1/(ttotale*0.000001);
RPMM=RPMM/2;
Serial.println(RPMM);
Serial.println("Moteur");
//transformation de la periode en frequence CARDAN
ttotale=t3+t4;
RPMC=1/(ttotale*0.000001);
RPMC=RPMC/4;
Serial.println(RPMC);
Serial.println("cardan");
//Calcul rapport transmission
RCM=RPMM/RPMC;
Serial.println(RCM);
//if (t3+t4>=1000)
{
//RCM=0;
}
//Afficage du rapport de boite
//1ER
if (RCM>15 && RCM<16)
{
digitalWrite(13, LOW);
digitalWrite(8, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
}
//2EME
if (RCM>11.5 && RCM<13.5)
{
digitalWrite(13, LOW);
digitalWrite(8, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(2, HIGH);
digitalWrite(13, HIGH);
digitalWrite(5, HIGH);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
}
//3EME
if (RCM>9 && RCM<10)
{
digitalWrite(13, LOW);
digitalWrite(8, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(4, HIGH);
digitalWrite(13, HIGH);
digitalWrite(5, HIGH);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
}
//4EME
if (RCM>7.5 && RCM<8.5)
{
digitalWrite(13, LOW);
digitalWrite(8, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(4, HIGH);
digitalWrite(13, HIGH);
digitalWrite(5, HIGH);
digitalWrite(8, HIGH);
}
//5EME
if (RCM>6.6 && RCM<7.4)
{
digitalWrite(13, LOW);
digitalWrite(8, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(13, HIGH);
digitalWrite(8, HIGH);
digitalWrite(6, HIGH);
}
//6EME
if (RCM>5.7 && RCM<6.5)
{
digitalWrite(13, LOW);
digitalWrite(8, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(4, HIGH);
digitalWrite(13, HIGH);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(8, HIGH);
digitalWrite(6, HIGH);
}
//Point mort
if (RCM>16.1)
{
digitalWrite(13, LOW);
digitalWrite(8, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(6, HIGH);
digitalWrite(5, HIGH);
digitalWrite(8, HIGH);
}
}
Si vous avez une solution, pour mesurer la fréquence des différents capteurs plus rapidement qu'avec la fonction pulseIn, je pense que cela devrait résoudre le problème
Merci d'avance
Alexis