Stap 5: Kleur verschuiving
Nu dat je aan het doen bent uw favoriete uitvoeren van willekeurige kleuren laten we laten wijzigen naadloos. Opnieuw de HSV-model is geen hulp: het zal laten doorlopen naar het naburige spectrum kleuren. Het RGB-model biedt een snelkoppeling: hebt u drie kleurkanalen en u hoeft alleen maar om elk van hen van hun uitgangspunten naar hun doelstellingen. We vermijden bent zwevend punt bewerkingen, dus moet de typen sommige variabelen wijzigen:
uint16_t color[3], nextColor[3];long colorStep[3]; byte count, a0, a1, a2;void setNextColor(){ nextColor[count]=random(256)<<8; a0=random(1); a1=((!a0)+count+1)%3; a0=(count+a0+1)%3; nextColor[a0]=(255-nextColor[count])<<8; nextColor[a1]=0; }void loop() {setNextColor(); for (byte k=0; k<3; k++) colorStep[k]=((long)nextColor[k] - color[k])/100; for (byte k=0; k<100;k++) { for (byte i=0; i<3; i++) color[i]+=colorStep[i]; setRGBpoint(0, color[0]>>8, color[1]>>8, color[2]>>8); delay(10); } for (byte k=0; k<3; k++) color[k] = nextColor[k]; setRGBpoint(0, color[0]>>8, color[1]>>8, color[2]>>8); delay(500); count+=random(15); count%=3; }
En welke zowat using naar de opzoektabel van de sinus golven? Hier gaan we, deze is nog beter als het niet stopt om te laten zien de exacte kleur we hoeft naar verplaatsen wilt (het krijgt genoeg showtime van de sinusgolf):
void setNextColorSine(){ a0=random(240); nextColor[count]=lights[a0]<<8; a1=random(1); a2=((!a1)+count+1)%3; a1=(count+a1+1)%3; nextColor[a1]=lights[(a0+100)%240]<<8; nextColor[a2]=0; }void loop() {setNextColorSine(); for (byte k=0; k<3; k++) colorStep[k]=((long)nextColor[k] - color[k])/255; for (byte k=0; k<120;k++) { setRGBpoint(0, (color[0]+colorStep[0]*lights[k])>>8, (color[1]+colorStep[1]*lights[k])>>8, (color[2]+colorStep[2]*lights[k])>>8); delay(10); } for (byte k=0; k<3; k++) color[k] = nextColor[k]; setRGBpoint(0, color[0]>>8, color[1]>>8, color[2]>>8); delay(10); // no need for extra delay, the sine wave will keep the color long enough count++; count%=3; }
Hopelijk tegen die tijd krijg je het idee hoe het te doen fade-outs en fade-ins...
En dat is alles voor vandaag! Volgende keer hoop ik om eindelijk aan mijn favoriete onderwerp van OnePixel informatie displays (Ja, het RGB-model is vitaal belang er ook)...
Tot dan — reacties en vragen welkom.