Stap 3: Analyse van de schets-Init
Nu uitleggen ik u, stap voor stap alle regels van de schets.
De eerste #include regels worden gebruikt om de specifieke code van avr voor handvat, in volgorde te importeren:
- Interrupt bibliotheek om de interrupt van timer 1 en knoppen. De interrupts van de twee knoppen worden gebruikt voor de microcontroller wakker na het gaat om te slapen om macht verbruiken.
- PROGMEM bibliotheek wordt gebruikt dat er constante variabele aan het flitsgeheugen in plaats van het RAM-geheugen. Het wordt gebruikt omdat alle variabelen gebruikt op de schets worden opgeslagen in het RAM-geheugen van de microcontroller en, meestal, de RAM lager dan het FLASH-geheugen is.
Dus, als ik gebruik een groot aantal constante variabelen - als de matrix van getallen - moet ik zetten in de flitser voor de instandhouding van het RAM-geheugen.
Ik wil u mededelen dat de IDE van Arduino, meestal, niet wordt weergegeven als het RAM-geheugen van de microcontroller vol is. Als u de gehele RAM hebben ingevuld, gewoon de schets op een gegeven moment zal verpletteren en u zult gek zijn omdat je niet achterhalen waarom het gebeurt.
Dus, als u grote constante variabelen, zoals multidimensionale array, gebruik dan PROGMEM. - Slapen bibliotheek wordt gebruikt om de microcontroller in een diepe staat waar het verbruikt weinig stroom.
- Bibliotheek van de macht wordt gebruikt om de macht van de randapparatuur in de microcontroller - zoals de ADC, timers, enz. Als we geen aan deze randapparatuur behoefte afsluiten wij hen.
Vervolgens hebben we de constante waarde voor de matrix, de pinnen en de knoppen:
#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
In volgorde:
- MATRIX_ROW is het nummer van de LEDs rijen. In dit geval 5 LEDsper regel.
- MATRIX_COL is het nummer van de LEDs cols. In dit geval 6 LEDs op kolom.
- PIN_NUMBER is het aantal pinnen gebruikt voor de 6 x 5 LEDs Charlieplexing Matrix.
- Button_A is het pin-nummer van de linker knop. Deze knop trigger de PCINT6 interrupt
Knop _B is het pin-nummer van de rechterknop. Deze knop trigger de INT0 interrupt.
Nu hebben we de variabelen die worden gebruikt voor de Charlieplexing LEDs Matrix:
- pinnen [PIN_NUMBER] is een array die de 7 pinnen gebruikt voor de Charlieplexing slaat.
connectionMatrix [MATRIX_ROW] [MATRIX_COL] [2] is een multidimensionale Array waarin de enige aansluiting van de LED in de Charlieplexing Matrix.
Het eerste getal van de twee getallen tussen de accolades, is de Anode.
Het tweede getal is de kathode.matrixState [MATRIX_ROW] [MATRIX_COL] is de multidimensionale array die wordt aangegeven welke LEDs moeten worden ingeschakeld of uitgeschakeld. Als u een beetje van deze matrix, de bijbehorende LED van OFF volgens welke bits u invoegen is ingeschakeld: 1 brandt, 0 is uit.
Deze Matrix wordt altijd gebruikt in de schets omdat zodat object, zoals een pad en bal, moet ze schreef in deze matrix. Dus u moet verwijderen van de vorige positie doordat de coördinaat van het object in de matrixState op 0, en vervolgens kunt u de nieuwe positie door de invoering van de 1 naar de nieuwe coördinaten. Altijd in de matrixState.Als u weergeven een gezicht in de matrix LED's wilt, moet u elke bit van uw gezicht matrix doorgeven aan de matrixState. Magisch de LEDs neemt je gezicht matrix! :)
Dit omdat de Charlieplexing Matrix automatisch - met timer 1 overflow interrupt bijgewerkt wordt - volgens alleen voor de matrixState Matrix.