Stap 8: Firmware - deel 1: overzicht
De meegeleverde bibliotheek definieert de volgende functies in pubnub/pubnub.h.
De complete broncode is beschikbaar in Deze repository GitHub.
Voordat ik de code induiken, laten we een moment om te gaan over alles wat er gebeurt. Zodra de AVR wordt geïnitialiseerd, is de hoofdlus alleen verantwoordelijk voor LED chase sequenties. Alle feitelijke controle wordt afgehandeld in interrupt service routines. Hiervoor wordt de 8 bits timer/teller 0 gebruikt.
Conceptueel spreken, wordt de timer gebruikt om aan te geven dat hetzij tijd LEDs inschakelen, of tijd LEDs om uit te schakelen. Wat LEDs moeten worden in- of uitschakelen wordt bepaald door een paar van multidimensionale arrays:
Vervolgens zal praten over hoe de kleuren worden eigenlijk gecreëerd door Timer 0.
// 1 bit for each RGB LED in each columnstatic void uint8_t leds[MATRICES][COLUMNS][COLORS]; // The actual color of each RGB (see color_8bit.h)static void uint8_t colors[MATRICES][COLUMNS][LEDS];
De array leds is 2 x 8 x 3 bytes - één byte voor elke kleur rij (R, G, & B) in elke kolom, in elke matrix. Elke bit in deze byte vertegenwoordigt één LED in die rij. De array van de kleuren is 2 x 8 x 8 bytes - één byte voor de gewenste kleur voor elke LED.
Om te hebben genoeg tijd om te bepalen van beide matrices, wordt een resolutie van 4 gebruikt. Dit kan lijken klein in vergelijking met de resolutie van 255 in computer kleuren gebruikt, maar houd er rekening mee dat 4 x 4 x 4 = 64 unieke kleuren. Het is mogelijk om deze resolutie sommige, maar 64 unieke kleuren lijkt veel voor mijn doeleinden. In werkelijkheid waren veel van deze kleuren zeer vergelijkbaar zijn, dus ik dit tot 44 in het headerbestand modules/macros/color_8bit.h verminderde. Dit bestand bevat ook een matrix van de afzonderlijke R, G, & B niveaus vereist voor het maken van elke beschikbare kleur.
Vervolgens zal praten over hoe de kleuren worden eigenlijk gecreëerd door Timer 0.