bonjour, voilà j'utilise ce bout de code pour asservir la commande d'un moteur en fonction du rpm mais lorsque je test, le moteur démarre mais le programme reste sur le premier palier lorsque le rpm > 2000 :
void loop(){
// Tachymetre
uint16_t rpm=0; // variable rpm calculee
int rpmFiltre;
if (rpmcount == 1)
timeold=millis();
else if (rpmcount > 20 ){
rotating_time = millis() - timeold;
rpm = 60000/ rotating_time*(rpmcount-1);
rpmFiltre = lpfilter(rpm, coef, rpmFiltre);
rpmcount = 0;
lcd.printOptions(1, COLOR_WHITE, COLOR_BLACK);
lcd.printXY(60, 62); //set cursor
lcd.println(rpm, DEC);
}
if (valeur == 1 && rpm < 2000){
Go = 1;
}
if (valeur == 1 && rpm >= 2000){
Go = 2;
}
if (valeur == 1 && rpm >= 3000){
Go = 3;
else if (valeur == 0){
Go = 0;
}
switch (Go){
case 0:
analogWrite (motorPin, 0);
motorState = 0;
run = 0;
break;
case 1:
analogWrite (motorPin, 150);
motorState = 1;
run = 0;
break;
case 2:
analogWrite (motorPin, 255);
motorState = 1;
run = 0;
break;
case 3:
analogWrite (motorPin, 0);
motorState = 0;
run = 1;
break;
defaut:
break;
}
void rpm_fun() {
rpmcount++; //Each rotation, this interrupt function is run twice
}
Merci pour votre aide.