Problème code POV Clock

Bonjour à tous,
Tout d’abord encore merci à tous ceux qui m’ont aidé jusqu’à maintenant!
Je continue mon horloge à aiguilles de 40 leds cms pilotées par 5 HC595 en SPI.
Voici un aperçu depuis que j’en parle:

L’ensemble marche bien à présent MAIS…
J’impose un délai d’affichage à mon horloge ce qui fait que suivant le niveau de batterie j’ ai un gros écart au midi (déchargée) puisque c’est là que se trouve l’aimant qui donne le top au capteur à effet hall, ou bien la boucle n’a pas le temps de se terminer (bien chargée) et l’horloge se met à tourner sur elle même… (obligé donc de retoucher le délai)

Je passe donc à l’étape je mesure le temps écoulé entre chaque top et j’en déduis un temps pour chaque pixel mais je ne suis pas sur de ma façon de faire.
En bref: J’ai nommé CurrentLap le temps entre le dernier top et celui du tour d’avant (appelé LastTop).
Je divise ce temps par le nombre de pixels affichés sur l’horloge (j’ai créé un tableau de 300 par 40) ce qui me donne PixelTime le temps d’affichage d’ un pixel.
Enfin j’ai déclaré TimeFromLastPixel comme ceci: (qui sert à savoir combien de temps afficher le pixel actuel jusqu’au suivant)

void AffichagePixel (int IndexPixel)
{
        digitalWrite(verrou, LOW);
        SPI.transfer( Display [0] [IndexPixel]); 
        SPI.transfer( Display [1] [IndexPixel]); 
        SPI.transfer( Display [2] [IndexPixel]);
        SPI.transfer( Display [3] [IndexPixel]);
        SPI.transfer( Display [4] [IndexPixel]); 
        digitalWrite(verrou, HIGH);     
}

void Time ()
{
  Top = millis(); 
  CurrentLap = (Top - LastTop);
  PixelTime = CurrentLap / tailletab;
  TimeFromLastPixel =  Top + (PixelTime * IndexPixel)- millis();
  LastTop = Top;
}

void Master ()
{
  for (IndexPixel = 1; IndexPixel < (tailletab+1); IndexPixel ++)
  {
    while (TimeFromLastPixel <= PixelTime)
    {
          AffichagePixel (IndexPixel);
    }
    digitalWrite(verrou, LOW);
    SPI.transfer( 0);
    SPI.transfer( 0);
    SPI.transfer( 0);        
    SPI.transfer( 0);
    SPI.transfer( 0);        
    digitalWrite(verrou, HIGH);  
    TimeFromLastPixel = 0;
  }
}

Et dans le void loop() j’appelle mes deux fonctions:

  attachInterrupt(0, Time, RISING); 
  attachInterrupt(0, Master, RISING);

J’obtiens quelques Leds allumées et fixes qui ne représentent rien qui me fasse comprendre quoi que ce soit…

Dans toutes les vidéos que j’ai pu voir de POV clock avançées on ne voit aucune démarcation du capteur à effet hall, voilà un moment que j’essaie mais sans succès, si vous avez des idées ou une autre manière de faire je suis preneur!!
Merci d’avance à vous pour votre aide!

Personne?

kri13400:   attachInterrupt(0, Time, RISING);   attachInterrupt(0, Master, RISING);

On ne peut attacher une interruption qu'une fois. En faisant ça tu détaches Time qui n'est jamais appelée. Il est inutile de placer attachInterrupt dans loop. On ne l'appelle normalement qu'une fois. Le contenu de Master devrait être dans loop ce traitement c'est ta tâche de fond, Time calculant le temps entre 2 rafraîchissements du balayage et remettant à zéro l'index qui balaye le tableau. Les variables dans Time doivent être déclarées volatil sinon les autres fonctions ne voient pas qu'elles ont changé.