KeyChainino - första spelet nyckelringen programmerbara med Arduino (5 / 14 steg)
Steg 5: Timer overflow-avbrott
Här talar vi om timer 1 spill och två knappar avbrotten.
Som nämnts har utförs ISR(TIM1_OVF_vect) funktion när översvämningen av timer 1 inträffar.
Inuti denna funktion har vi två delar:
- Den första delen används för att uppdatera den boll ståndpunkten enligt ballUpdatePositionCounter.
- Den andra delen används för att köra matrisen Charlieplexing enligt matrixState:
För varje rad och COL kontrollerar vi först om motsvarande bit av matrixState är 1 eller 0.
Efter vi ändra tillståndet för stiften på mikrokontroller på produktion och hög eller låg enligt connectionMatrix.
Vi vänta lite mikrosekunder till tillstånd att lysa upp lamporna och nästa vi stänga av dessa lysdioder genom att sätta corrisponding stiften till ingången.
Annars om biten av matrixState är 0, sätta vi motsvarande stift av connectionMatrix till ingången.
I början och i slutet av denna funktion, vi i ordning, inaktivera och aktivera det globala avbrottet eftersom eftersom timer översvämningen är för fort, vi behöver pausa den medan den gör alla koden i funktionen.
De andra två funktionerna, ISR(PCINT0_vect) och ISR(INT0_vect), faktiskt göra inte något. Det är just uttalat för att använda avbrottet av de två knapparna för att vakna mikrokontroller.
Om du vill veta mer om timer overflow avbrottet, kolla in mitt inlägg här.