Compte tour Horloge POV qui marche pas

bonjour à tous,
J'essaie de faire un compte tour pour une horloge POV, l'horloge fonctionne bien mais pas le compte-tour.
Si quelqu'un pouvait venir à mon aide...
L'idée c'était d'incrémenter la variable compteur à chaque passage devant un capteur à effet hall, et ça pendant une seconde, et de récupérer le nombre de passages pendant cette seconde (j'ai appelé ça compteurCurrentLap).
Voici mon code:

     compteur++;
     compteurRPM = compteurCurrentLap; // *60 pour la minute lorsque ça marchera
     compteurCurrentLap = compteur - compteurLastLap;

     RpmM = compteurRPM/1000;
     RpmC = (((compteurRPM/100)*100) - (RpmM * 1000))/100;         // Ce bloc là fonctionne ce sont ces 4 variables qui sont affichées
     RpmD = ((compteurRPM/10)) - ((RpmM*100) + (RpmC *10));
     RpmU = compteurRPM -((RpmM*1000) + (RpmC*100) + (RpmD*10));

      if (seconde - previousSec == 1) //seconde est une variable d'un module real time clock
      {
        previousSec = seconde; 
        digitalWrite (LEDG, HIGH);    //cette led clignote bien, donc le if est bon, elle est mise à l'état bas plus tard dans le code	
        compteurLastLap = compteur;
      }

Tout cela fait partie d'une fonction qui fait aussi l'affichage, et qui est appelée par une interruption (lors du passage du capteur).
Lorsque je lance ça à l'affichage j'ai un chiffre qui s'incrémente tout le temps...
Le résultat aurait dut être un chiffre proche de 22 environ lorsque la vitesse est stable et rafraichi à chaque nouvelle seconde.
Toutes les variables sont déclarées en global, si vous avez une solution à ce problème ou des idées pour faire plus simple ça fais une semaine que je suis dessus je craque... ^^
Merci à vous!

Bonjour
Est-ce que le compteur est remis à 0 quelque part ?
A+

Merci de t'intéresser à mon problème, non la variable compteur n'est remise à zéro nulle part...

Bonjour
je pense que ça serait mieux ainsi

compteur++;
     
     RpmM = compteurRPM/1000;
     RpmC = (((compteurRPM/100)*100) - (RpmM * 1000))/100;         // Ce bloc là fonctionne ce sont ces 4 variables qui sont affichées
     RpmD = ((compteurRPM/10)) - ((RpmM*100) + (RpmC *10));
     RpmU = compteurRPM -((RpmM*1000) + (RpmC*100) + (RpmD*10));

      if (seconde - previousSec == 1) //seconde est une variable d'un module real time clock
      {
        previousSec = seconde;
        compteurCurrentLap = compteur - compteurLastLap;
        compteurRPM = compteurCurrentLap; // *60 pour la minute lorsque ça marchera
        digitalWrite (LEDG, HIGH);    //cette led clignote bien, donc le if est bon, elle est mise à l'état bas plus tard dans le code	
        compteurLastLap = compteur;
      }

A+

Bonjour
pour le bloc:

RpmU = compteurRPM%10;
RpmD = (compteurRPM%100) - RpmU;
RpmC = (compteurRPM%1000) - (compteur%100);
RpmM = compteurRPM/1000);

les parenthèses ne sont peut-être pas nécessaires;
A+

Bonjour,
J'avais pas vu vos réponses, le problème est résolu, merci à vous!