Interaktiva LED öl Pong tabell (52 / 87 steg)
Steg 52: Programvara: hur the RGB Pods är uppdaterade
void RGB_Pod (UINT8 pod, UINT16 röd, UINT16 grön, UINT16 blå)
Denna funktion tar parametern "pod" som bör vara ett värde från 1-20 och ange motsvarande röda, gröna och blå värden till respektive kanaler för att pod. Det finns ingen blekning i denna funktion, det kommer helt enkelt ändra pod till oavsett vilken färg du önskar.
Ändra pod #5 färg till röd
RGB_Pod(5,4095,0,0);
void Pod_Set_Color (UINT8 pod, RGB pod_color)
Denna funktion är exakt samma som RGB_Pod(p,r,g,b), bara det använder en RGB struct för att ange färg på pod. Detta är trevligt om du snabbt vill ange pod till en av standard 10 färger.
Ändra pod #5 färg till röd
Pod_Set_Color(5,Color[Red]);
void Fade_To (UINT8 pod, gammal RGB, nya RGB, UINT16 fördröjning);
Denna funktion är den absolut min favorit eftersom det tillåter användaren att tona in och ut i färger. Detta ger en fin mjuk övergång från färgen gamla färgen nya och hastigheten på övergången styrs genom att justera "försening". I min kod har jag en global struct matris kallas 'PODn [20]"som används för att spara det aktuella värdet för varje pod. För PODn [x], kommer "x" alltid vara 1 är mindre än värdet på pod som vi skriver för att eftersom baljorna är riktat från pod #1 - #20 och matrisen är PODn [0-19]. Formatet för den här funktionen är som följer:
Fade_To (POD #, PODn [POD #-1], färg, fördröjning);
Här är ett exempel på blekning en pod från rött till blått:
Pod är redan röd så PODn [4] är redan lika med färg [röd]
Fade_To(5,PODn[4],Color[Blue],10);
Fade priser och Fade perioder
Du behöver bara köra Fade_To() en gång och pod kommer att blekna även om du stoppa programmet. I Timer3 finns en funktion som kallas Fade_State(void) som kommer att kontrollera för att se om någon av RGB baljorna är för närvarande på att blekning från en färg till nästa. Om en pod är fading, uppdateras rutinen automatiskt pod ett fade steg per avbrott tills pod har helt bleknat i färgen som användaren har angett. Andelen fade beräknas enkelt:
Fade Rate = mängden fade steg som behövs för att helt bleknar till en annan
En Fade steg = 8 ms per avbrott
Fade Period = hur lång tid det tar för pod helt blekna
Fade ränta = (Fade Period / en Fade steg)
Example #1
Kan blekna RGB pod #8 standard färgen rosa och sätta den till sig ha fade 400ms.
Fade ränta = (400ms / 8 ms per avbryta) = 50
Fade pod #8 till rosa under loppet av 400ms
Fade_To 8, PODn [7], färg [rosa], 50.
Den vissna kommer inte vara 100% korrekt men det är bra eftersom vi inte behöver som exakt av timing. Med alla andra avbrott och kod körs det kan avvika av några mikrosekunder varje gång, men det är bra för vårt program. Om alla baljorna uppdaterar samtidigt, är max tiden i Fade_State(void) 1.3ms. Vi vill inte slösa en stor del av tiden i ett avbrott rutin och detta driver det, men det hela fungerar fortfarande bra. Jag hade ursprungligen baljorna grupperade i kluster av fem och varje kluster uppdaterades endast varje 4: e avbrott cykel som medfört max tiden ner till ~ 400μs, som var bättre, men då var jag bara uppdatera tona kliver av varje pod varje 4: e Timer3 avbrott cykla i stället för varje enskild avbrott cykel. Hursomhelst kommer det att fungera men genom att göra det varje avbrott cykel det ger oss mer precision för fade priser.