Mina 2 - holoclock (3 / 6 steg)
Steg 3: Mörkläggning algoritm - korset tona effekt och dubbel buffring
Jag behövde inte ha enskilda lysdioder kontrolleras på separata ljusstyrkenivåer att göra en cross fade. Behövde bara det första mönstret på en ljusstyrka och andra vid en låg ljusstyrka. Sedan under en kort period jag skulle minska ljusstyrkan på först lite, och öka andra... skulle detta hålla igång tills det andra mönstret som vid full. Sedan klockan skulle vänta tills nästa mönster berodde på att visa och det skulle finnas en annan övergång.
Därmed behövde jag lagra två mönster. Den som visas för tillfället och det andra mönster som var på väg att visas. Dessa är i matriser nLedsA [] och nLedsB. (Obs inget att göra med hamnar i detta fall). Detta är den dubbla buffert.
Funktionen update_display() ändrades för att bläddra igenom åtta ramar och visar ett antal ramar från första en array, sedan den andra. Ändra antalet bildrutor tilldelas varje buffert i hela åtta cykler definieras hur ljus varje mönster skulle vara. När vi avslutat cykling mellan buffertar vi bytte buffrar "display" och "nästa display" runt, så att mönstret genererar funktion skulle sedan skriva endast till "nästa Visa" bufferten.
Diagrammet nedan visar detta förhoppningsvis. Du bör kunna se att övergången kommer att ta 64 scan ramar. På bilden, den lilla infällda visar på scan fram diagram från föregående sida konstfullt skalas ner.
Ett ord på re-fresh kurs. Allt detta måste göras mycket snabbt. Vi har nu två nivåer av extra uträkning, en för den omgivande display dimmness och en för de åtta ram cykler tillbringade gör en övergång mellan två buffertar. Denna kod var således bör vara skrivna i församlingen, men är tillräckligt bra i "C".