oui, les deux input viennent de ton prg, je ne savais pas ce que tu voulaais en faire.
oui, le nb de cames est le nombre d'impulsions par tour moteur d'une part et cardan d'autre part
segment est déclaré en global au début du prg et il vaut 4 ( c'est D4)
donc il faut lire :
digitalWrite(D4, un) ;
digitalWrite(D4+1, deux) ; soit digitalWrite(D5, deux) ;
etc...
un, deux, trois,...sept sont l'état souhaité des segments passés en parametres à l'appel de la foncton
exemple:
affichage(0,1,1,0,0,1,1);//quatre
ce qui donnera:
segment A de l'afficheur raccordé à D4 prendra l'état 0;
segment B de l'afficheur raccordé à D5 prendra l'état 1;
segment C de l'afficheur raccordé à D6 prendra l'état 1;
segment D de l'afficheur raccordé à D7 prendra l'état 0;
segment E de l'afficheur raccordé à D8 prendra l'état 0;
segment F de l'afficheur raccordé à D9 prendra l'état 1;
segment G de l'afficheur raccordé à D10 prendra l'état 1;
nota ; ce qu'a fait Vileroi améliore le prg en programmation pure et favorise sa vitesse d'execution
J'ai enfin accès à la voiture sur la quelle je dois monter l'afficheur de rapport engagé.
Je suis reparti de mon programme qui permettait juste de mesurer le régime moteur.
Je me suis rendu compte d'un problème avec celui-ci qui va forcément en engendrer sur les autres. Quand on réalise les mesures sur le moteur et sur le cardan, les mesures du moteur évolue plus vite par ça vitesse de rotation. Donc si on fait le temps entre deux front montant du moteur divisé par le temps entre deux front montant du cardan et que seul le temps moteur à évolué on va se retrouver avec des erreurs.
Il faudrait donc réaliser une mesure pour les cardan et à la suite de cette mesure celle du moteur.
Est ce que vous avez une idée de comment faire ? J'essaye des trucs depuis tout à l'heure mais ça fonctionne pas...
volatile unsigned int freq;
volatile unsigned int freq1;
volatile unsigned int rpm;
volatile unsigned int rpc;
volatile unsigned int re;
unsigned long start;
unsigned long elapsed;
unsigned long start1;
unsigned long elapsed1;
void setup() {
attachInterrupt(1, rpm_pulse, FALLING);
attachInterrupt(0, rpc_pulse, FALLING);
//digitalWrite(2, HIGH);
Serial.begin(9600);
}
void loop() {
re=rpm/rpc;
Serial.print(rpm);
Serial.print(" rpm ");
Serial.print(rpc);
Serial.print(" rpc ");
Serial.print(re);
Serial.println(" re ");
//delay(50);
}
void rpm_pulse() {
static int cpt=0;
if (++cpt>=30){
unsigned long end = micros();
elapsed = end - start;
start=end;
freq = 10000000/elapsed ;
rpm=freq*90;
cpt=0;
}
}
void rpc_pulse() {
static int cpt1=0;
if (++cpt1>=5){
unsigned long end1 = micros();
elapsed = end1 - start1;
start1=end1;
freq1 = 10000000/elapsed;
rpc=freq1*7.5*60*0.00196;
cpt=0;
}
}
//elapsed = millis() - start;
//start = millis();
//freq = 1000/elapsed;
//rpm=freq*30;
Voila le programme en question. Je l'ai modifier pour pouvoir mesurer a la fois la vitesse de rotation du moteur et la vitesse des roue (vitesse du cardan en rpm * le périmètre de la roue). Ca fonction très bien, j'ai vérifié les information au tableau de bord. Mais comme expliquer plus haut il faudrait que quand on met a jour la vitesse du cardan, on enchaine avec le régime moteur. Comme ca les 2 sont mise a jour en même temps.
Je sais pas si j'ai été claire dans mes explications, si ce n'est pas le cas hésitez pas a me redemander
J'ai essayé de me me renseigner mais j'ai pas trouvé grand chose... Je pense qui ne faut pas faire une interruption pour le régime moteur mais demandé d'exécuter la mesure du régime moteur juste après après la mesure du régime du cardan.
Si on rajoute un
rpm_pulse();
À la fin du void rpc_pulse (), vous pensez que ça peut fonctionner ?
Après il faut bloquer pour qu'une fois exécuter le void rpm_pulse ne puisse pas être interrompu.