lire le nombre de rotation par minute d'un ventilo de cpu

bonsoir, pour un petit projet sur le quelle je bosse en ce moment, j'ai besoin de connaitre le nombre de rotation par minute d'un ventilo de CPU. j'ai trouvé le code suivant sur le net, mais il me donne des information très étranges.

int half_revolutions = 0;
int rpm = 0;
unsigned long lastmillis = 0;


void setup() {
  // put your setup code here, to run once:
  pinMode(3, OUTPUT );
  pinMode(A1, INPUT);
  pinMode(6, INPUT);
  Serial.begin(9600);
  attachInterrupt(2, rpm_fan, RISING);
}

void loop() {
  analogWrite(3, analogRead(A1) / 4);
  if (millis() - lastmillis == 1000) { //Uptade every one second, this will be equal to reading frecuency (Hz).
    detachInterrupt(2);//Disable interrupt when calculating
    rpm = half_revolutions * 60; // Convert frecuency to RPM, note: this works for one interruption per full rotation. For two interrups per full rotation use half_revolutions * 30.
    Serial.print("RPM = "); //print the word "RPM" and tab. 
    Serial.println(rpm); // print the rpm value.
    half_revolutions = 0; // Restart the RPM counter
    lastmillis = millis(); // Uptade lasmillis
    attachInterrupt(0, rpm_fan, FALLING); //enable interrupt

  }
}


void rpm_fan() {
  half_revolutions++;
}

lors ce que mon ventilo tourne très lentement, j'obtiens des résultats comme 20530 RPM alors que quand il est a fond j'obtiens des résultat au alentours de 2000 RPM (sachant que le ventilo tourne a 2500 RPM max selon le constructeur).

bref ca fait un moment que je cherche, j'ai tenter d'utilisé la fonction pulseIn() mais j'obtenais des résultats négatif et hors sujets. si quelqu'un a une solution pour moi je suis preneur. merci

hello

récupérer un prg sur le net ........... il y a de tout

dans le set up, tu "attaches l'interruption pinoche 2" en début de loop,tu "détaches l'interruption pinoche 2" puis en fin de loop, tu ré-attach l'interruption pinoche 0"????????????????????

en debut de loop tu compares avec "==" if (millis() - lastmillis == 1000) il faut une bonne dose de chance pour etre "=="!!!!!!!!!!!!

tu parles de half_revolutions tu devrais avoir une division par deux pour avoir la fréquence pourquoi multiplier par 60 ?? puisque tu releves le compteur pendant 1 seconde ?

tu ne dis pas ce que tu fais avec analog 1 et 3 , plus qu'avec pin 6

as tu vérifié que 2500*2 est dans les capacités de ton système?