KeyChainino - första spelet nyckelringen programmerbara med Arduino (2 / 14 steg)
Steg 2: General skiss förklaring
Om du inte redan gjort, Hämta arkanoid skissen från här
Allmän skiss förklaring:
Detta KeyChainino arkanoid-liknande spel är baserat på en boll som studsar på "skärmen" (matrix lysdioder) och en paddel användas för att undvika fallen till bollen i den nedre delen av skärmen.
Hjärtat av skissen är funktionen aktiveras med överflöd av timer 1. Denna funktion används för två saker:
- Uppdatera automatiskt (i bakgrunden) av spelet värden, som bollen ställning
- Uppdatera matrisen Charlieplexing enligt en programmerad matris - kallad matrixState - som används för att aktivera eller inaktivera lysdioderna och så visar saker på skärmen.
Jag vill spendera några ord om Charlieplexing matrisen.
Charlieplexing Matrix - enligt Wikipedia - är en teknik för att köra en multiplexade display i som relativt få I/O stift på en mikrokontroller för att köra en matris med lysdioder.
I grund och botten med denna teknik vi kan köra mer lysdioder än I/O stift av mikrokontroller.
Hur? Genom att ansluta lysdioder på ett visst sätt - beskrivs i ovanstående artikel - kan du köra lysdioderna genom att ändra tillståndet för mikrokontroller stiften. Du kan aktivera en LED genom att vrida en kicken klämmer fast och låg en annan PIN-kod. De andra stiften måste vara i tre lägen, vilket innebär att dessa stift får tas som indata.
Varje gång den timer 1 counter flödar över - vilket innebär att det är counter kom tillbaka till noll - dess overflow avbrott inträffar och dess funktionen uppdaterar Charlieplexing matrisen genom att läsa värdet för 6 x 5 matrixState och sätta detta värde (1 eller 0) för den specifika LED.
Bara en LED på tiden är putted på, men översvämningen är för fort - mer snabb än ögat frekvensen läsning - vi har känslan av att alla lampor är på samtidigt.
Men du behöver inte bry sig om denna charlieplexing funktion, eftersom du behöver bara ändra värdena för matrixState att slå på eller av lysdioderna.
Här på matrixState. I detta fall är alla lampor avstängda.
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}
};
Om du vill skapa ett ansikte, kan du ändra matrixState på detta sätt:
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}
};
Självklart behöver du inte ändra matrixState på detta sätt. Efter ska jag visa dig hur du kan göra det med matriser.
Kolla in detta inlägg för mer information om Charlieplexing.