Stap 5: De timer overflow interrupt
Hier gaat het om de timer 1-overloop en de twee knoppen interrupts.
Zoals hierboven uiteengezet, wordt de functie ISR(TIM1_OVF_vect) wordt uitgevoerd wanneer de overloop van de timer 1 plaatsvindt.
Binnen deze functie hebben we twee delen:
- Het eerste deel wordt gebruikt voor het bijwerken van de bal positie volgens de ballUpdatePositionCounter.
- Het tweede deel wordt gebruikt om te rijden de matrix van de Charlieplexing volgens de matrixState:
Voor elke rij en COL controleren we eerst als de overeenkomstige bit van de matrixState 1 of 0 is.
Nadat we omzetten in de staat of de pennen van de microcontroller OUTPUT en hoge of lage volgens de connectionMatrix.
We wachten een beetje microseconden voor vergunningen aan het licht van de LED's, en vervolgens wij deze LEDs uitschakelen door de corrisponding pinnen om INPUT.
Anders, als de bit van de matrixState 0 is, we maken de overeenkomstige pinnen van de connectionMatrix aan INPUT.
Aan het begin en aan het einde van deze functie, wij, in volgorde, uitschakelen en activeren van de global interrupt omdat, aangezien de timer overflow te snel is, we onderbreken moeten terwijl het doet alle code in de functie.
De andere twee functies, ISR(PCINT0_vect) en ISR(INT0_vect), eigenlijk doe niets. Slechts wordt verklaard met de interrupt van de twee knoppen te wakker van de microcontroller.
Als u meer informatie over de timer overflow interrupt wilt, check out mijn post hier.