Étape 5: L’interruption de débordement timer
Ici, on parle le débordement du timer 1 et les interruptions de deux boutons.
Comme expliqué ci-dessus, la fonction ISR(TIM1_OVF_vect) est exécutée en cas de débordement du timer 1.
À l’intérieur de cette fonction, nous avons deux parties :
- La première partie est utilisée pour mettre à jour la position de la balle selon la ballUpdatePositionCounter.
- La deuxième partie est utilisée pour exciter la matrice Charlieplexing selon le matrixState :
Tout d’abord pour chaque ligne et le COL, nous vérifions si le bit correspondant de la matrixState est 1 ou 0.
Après que nous avons modifié l’état des broches du microcontrôleur pour sortie et haute ou basse selon la connectionMatrix.
Nous attendons un peu microsecondes à permis d’allumer les LEDs, et nous passons au large de ces LEDs en mettant les broches correspondante à l’entrée.
Dans le cas contraire, si le bit de la matrixState est 0, nous mettons les broches correspondantes de le connectionMatrix à l’entrée.
Au début et à la fin de cette fonction, nous, dans l’ordre, désactiver et activer l’interruption mondiale parce que, étant donné que le trop-plein de minuterie est trop rapide, nous devons mettre en pause alors qu’il fait tout le code dans la fonction.
Les deux autres fonctions, ISR(PCINT0_vect) et ISR(INT0_vect), ne font rien. Il est juste déclaré utiliser l’interruption des deux boutons pour réveiller le microcontrôleur.
Si vous voulez en savoir plus sur l’interruption de débordement du timer, consultez mon post ici.