KeyChainino - första spelet nyckelringen programmerbara med Arduino (3 / 14 steg)
Steg 3: Analysera skiss Init
Nu förklara jag för dig, steg för steg, alla rader av skiss.
De första raderna #include används för att importera avr specifika koden för handtag, i ordning:
- Avbryta bibliotek för att hantera avbrottet från timer 1 och knappar. Avbrotten av de två knapparna används för att vakna upp mikrokontroller efter det går för att sova för att minska makten konsumerar.
- PROGMEM biblioteket används att sätta konstant variabel till FLASH-minnet i stället för RAM-minnet. Det används eftersom alla variabler som används på skissen lagras i RAM-minnet av mikrokontroller och, oftast, RAM-minnet är mindre än FLASH-minnet.
Så, när jag använder ett stort antal av konstant variabler - som nummer matrix - jag behöver sätta i blixten för att bevara det RAM-minnet.
Jag vill informera er som IDE av Arduino, oftast, inte visar om RAM-minnet av mikrokontroller är full. Om du har fyllt hela RAM, helt enkelt skissen att krascha någon gång och du kommer att vara galen eftersom du inte lista ut varför det händer.
Så, om du använder stora konstant variabler, som flerdimensionell array, Använd PROGMEM. - Sova bibliotek används för att sätta mikrokontroller i ett djupt tillstånd där den förbrukar mycket låg effekt.
- Power bibliotek används för att hantera kraften i kringutrustning i mikrokontroller - som ADC, timers, etc. När vi inte behöver dessa kringutrustning stänga vi dem.
Nästa har vi konstantvärdet för matrisen, stiften och knapparna:
#define MATRIX_ROW 5
#define MATRIX_COL 6
#define PIN_NUMBER 7
#define BUTTON_A 6 //pin 6 - PCINT6
#define BUTTON_B 8 //pin 8 - INT0
I ordning:
- MATRIX_ROW är antalet lysdioder rader. I detta fall 5 lysdioderper rad.
- MATRIX_COL är antalet lysdioder cols. I detta fall 6 lysdioder av kolumn.
- PIN_NUMBER är antalet stift används för 6 x 5 lysdioder Charlieplexing matris.
- Button_A är den pin-kod på vänster knapp. Denna knapp utlösa PCINT6 avbrottet
Knappen _B är den pin-kod på rätt knapp. Denna knapp utlösa INT0 avbrottet.
Nu har vi de variabler som används för Charlieplexing lysdioder matrisen:
- stift [PIN_NUMBER] är en array som lagrar 7 stiften används för Charlieplexing.
connectionMatrix [MATRIX_ROW] [MATRIX_COL] [2] är en multidimensionell Array som visar en enda anslutning av varje LED i matrisen Charlieplexing.
Första numrerar av de två siffror som omsluts av klammerparentes, är anoden.
Den andra siffran är katoden.matrixState [MATRIX_ROW] [MATRIX_COL] är den flerdimensionell matris som anger som lysdioder måste slås på eller av. Om du ändrar en bit i denna matris, motsvarande lampan slås på av OFF enligt vilka bitar du infoga: 1 är på, 0 är avstängd.
Denna matris används alltid i skissen för att för att visa objekt, som pad och klumpa ihop sig, måste de vara skrev i denna matris. Så måste du ta bort den tidigare ståndpunkten genom att objektet koordinaten i matrixState till 0, och sedan kan du skriva den nya positionen genom att sätta 1 för nya koordinater. Alltid i matrixState.Om du vill visa ett ansikte i matrisen lysdioder, måste du passerar varje bit av din ansikte matris till matrixState. Magiskt lysdioderna antar din ansikte matris! :)
Detta eftersom matrisen Charlieplexing uppdateras automatiskt - med timer 1 spill avbrott - enligt endast för matrixState matris.