Stap 2: Algemene Sketch uitleg
Als u nog niet hebt gedaan, download de arkanoid schets van hier
Algemene schets uitleg:
Dit KeyChainino arkanoid-achtige spel is gebaseerd op een bal die stuitert op de "screen" (matrix LED's) en een peddel gebruikt om te voorkomen dat de watervallen van de bal in het onderste gedeelte van het scherm.
Het hart van de schets is de functie ingeschakeld door de overloop van de timer 1. Deze functie wordt gebruikt voor twee dingen:
- Automatisch bijwerken (in achtergrond) van de spel waarden, zoals de bal positie
- Het bijwerken van de Charlieplexing Matrix volgens een geprogrammeerde matrix - genoemd matrixState - die wordt gebruikt op of uit te schakelen de LEDs en zo naar shows dingen op het scherm.
Ik wil kort ingaan op de Charlieplexing Matrix besteden.
De Charlieplexing Matrix - volgens Wikipedia - is een techniek voor het besturen van een multiplexed display in welke relatief weinig I/O pinnen op een microcontroller worden gebruikt om te rijden een array voor de LEDs.
Kortom, met deze techniek zijn wij in staat om te rijden van meer LEDs dan de I/O pinnen van de microcontroller.
Hoe? Door het aansluiten van de LED's op een bepaalde manier - beschreven in het bovenstaande artikel - kunt u de LED's rijden door het veranderen van de staat of de pennen van de microcontroller. Kunt u op één LED door te draaien aan hoge één pin en laag een andere pin. De andere pinnen moeten in drie statuswaarden, wat betekent dat deze pinnen moeten worden gebracht als INPUT.
Elk tijd de timer 1 teller overloopt - wat betekent dat de teller kwam terug op nul - de overflow interrupt optreden en de functie de Charlieplexing matrix werkt door het lezen van de waarde van de 6 x 5 matrixState en zet deze waarde (1 of 0) om de specifieke LED.
Alleen een LED op tijd is putted op, maar terwijl de overloop te snel is - meer snel dan de frequentie van het oog lezen - we hebben het gevoel dat alle de LEDs zijn ON op hetzelfde moment.
Toch hoeft u niet tot zorg over deze charlieplexing-functie, omdat je hoeft alleen te wijzigen van de matrixState waarden om te zetten in- of uitschakelen van de LED's.
Hier de matrixState. In dit geval zijn alle LEDs uitgeschakeld.
bool matrixState[MATRIX_ROW][MATRIX_COL] = { {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}};
Als u maken van een gezicht wilt, kunt u de matrixState op deze manier wijzigen:
bool matrixState[MATRIX_ROW][MATRIX_COL] = { {0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 1, 0}, {0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 1}, {0, 1, 1, 1, 1, 0}};
Uiteraard hoeft u niet te wijzigen van de matrixState op deze manier. Nadat ik je laten hoe u het kunt doen met arrays zien zal.
Check deze post voor meer informatie over Charlieplexing.