Stap 52: Software: hoe de RGB peulen worden bijgewerkt
VOID RGB_Pod (UINT8 pod, UINT16 rode, groene UINT16, blauwe UINT16)
Deze functie zal de parameter 'pod' die moet bestaan uit een waarde van 1-20 en de bijbehorende waarden voor rood, groen en blauw ingesteld op de respectieve kanalen van die pod nemen. Er is geen vervagen in deze functie, zal het gewoon veranderen de pod in welke kleur u wenst.
Verandering pod #5 de kleur rood
RGB_Pod(5,4095,0,0);
VOID Pod_Set_Color (UINT8 pod, RGB-pod_color)
Deze functie is exact hetzelfde als RGB_Pod(p,r,g,b), het gebruikt alleen een struct RGB om de kleur van de pod te stellen. Dit is aardig als u snel wilt instellen van de pod op een van de standaard 10 kleuren.
Verandering pod #5 de kleur rood
Pod_Set_Color(5,Color[red]);
VOID Fade_To (UINT8 pod, oude RGB, nieuwe RGB, UINT16 vertraging);
Deze functie is veruit mijn favoriet als het kan de gebruiker in en uit de kleuren vervagen. Dit biedt een mooie soepele overgang van de kleur van de oude naar de kleur nieuw en de snelheid van de overgang wordt gecontroleerd door "vertraging" aan te passen. Ik heb in mijn code, een globale struct matrix genaamd 'PODn [20]' die wordt gebruikt voor het opslaan van de huidige waarde van elke pod. Voor PODn [x] zal 'x' altijd 1 kleiner is dan de waarde van de pod die wij te schrijven omdat de peulen worden behandeld van de pod #1 - #20 en de array PODn [0-19 is]. De notatie voor deze functie is als volgt:
Fade_To (POD #, PODn [POD #-1], kleur, vertraging);
Hier is een voorbeeld van een pod van rood naar blauw fading:
De pod is reeds rode zo PODn [4] al gelijk is is aan de kleur [RED]
Fade_To(5,PODn[4],Color[Blue],10);
Fade tarieven en Fade perioden
U hoeft alleen te Fade_To() eenmalig uit te voeren en de pod blijft langzaam te verdwijnen, zelfs als u het programma stoppen. In Timer3 is er een functie genaamd Fade_State(void) dat controleren zal om te zien als een van de RGB-peulen momenteel vervagen van de ene kleur naar de volgende. Als een pod is fading, worden de routine automatisch de pod één meer vervagen stap per onderbreken totdat de pod heeft volledig verdween in de kleur die de gebruiker heeft opgegeven. De fade-tarief kan gemakkelijk worden berekend:
Vervagen tarief = de hoeveelheid vervagen stappen die nodig zijn om volledig vervagen naar een andere kleur
Een Fade stap = 8ms per Interrupt
Vervagen van de periode = van de hoeveelheid tijd die nodig is voor de pod te helemaal vervagen
Tarief vervagen = (periode vervagen / een Fade stap)
Example #1
Laat vervagen RGB pod #8 in de standaardkleur roze en stel deze in op een fade-periode van 400ms hebben.
Tarief vervagen = (400ms / 8ms per onderbreken) = 50
Pod #8 naar roze verkleuren in de loop van 400ms
Fade_To (8, PODn [7], kleur [roze], 50);
De fade-periode zullen niet 100% nauwkeurig maar dat is prima als we hoeven niet dat precieze timing. Met alle andere interrupts en code uitgevoerd het afwijken door een paar microseconden elke keer, maar dat is prima voor onze toepassing. Als alle van de peulen op hetzelfde moment bijwerkt, is de max tijd doorgebracht in de Fade_State(void) 1.3ms. We willen niet te verliezen van een grote hoeveelheid tijd in een interrupt routine en dit is duwen, maar alles werkt nog steeds prima. Ik had oorspronkelijk de peulen gegroepeerd in vijf clusters en elk cluster was alleen bijgewerkt elke 4e interrupt cyclus waardoor de max tijd neer over ~ 400μs, die was beter, maar dan ik was alleen het bijwerken van de fade stappen van elke pod elke 4e Timer3 interrupt cyclus in plaats van elke één interrupt-cyclus. Één van beide manier het zal werken, maar door het te doen elke interrupt-cyclus het geeft ons meer precisie voor de fade-tarieven.