Hur man gör ordentlig Rainbow och slumpmässiga färger med RGB-färgmodellen (5 / 5 steg)
Steg 5: Färgskiftning
Nu när du gör din favorit körning av slumpmässiga färger låt oss göra dem ändra sömlöst. Igen den HSV modellen är till någon hjälp: det kommer att göra oss gå igenom de närliggande spektrum färgerna. RGB-modellen ger en genväg: du har tre färgkanaler och du behöver bara flytta dem från deras utgångspunkter till sina mål. Vi är att undvika flyttalsoperationer, så behöver ändra typerna av vissa variabler:
uint16_t färg [3], nextColor [3].
lång colorStep [3].
antal byte, 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();
för (byte k = 0; k < 3; k ++) colorStep [k] = ((långa) nextColor [k] - färg [k]) / 100;
för (byte k = 0; k < 100; k ++)
{
för (byte jag = 0; jag < 3; i ++) färg [i] += colorStep [i];
setRGBpoint (0, färg [0] >> 8, färg [1] >> 8, färg [2] >> 8);
Delay(10);
}
för (byte k = 0; k < 3; k ++) färg [k] = nextColor [k];
setRGBpoint (0, färg [0] >> 8, färg [1] >> 8, färg [2] >> 8);
Delay(500);
räkna += random(15);
count % = 3;
}
Och vad sägs om att använda uppslagstabellen sine vågor? Här går vi, här är ännu bättre eftersom den inte behöver någon slutar att visa exakt färg vi flyttar till (det blir nog showtime från sinus våg):
void setNextColorSine()
{
a0=random(240);
nextColor [antal] = ljus [a0] << 8;
a1=random(1);
a2 = ((!a1) + count + 1) %3;
a1 = (count + a1 + 1) %3;
nextColor [a1] = ljus [(a0+100) % 240] << 8;
nextColor [a2] = 0;
}
void loop() {
setNextColorSine();
för (byte k = 0; k < 3; k ++) colorStep [k] = ((långa) nextColor [k] - färg [k]) / 255;
för (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);
}
för (byte k = 0; k < 3; k ++) färg [k] = nextColor [k];
setRGBpoint (0, färg [0] >> 8, färg [1] >> 8, färg [2] >> 8);
Delay(10); inget behov av extra fördröjning, sinus våg kommer att hålla färgen tillräckligt länge
greve ++;
count % = 3;
}
Förhoppningsvis nu får du idén hur man gör fade-outs och fade-ins...
Och det var allt för idag! Nästa gång hoppas jag att äntligen få till min favorit ämne av OnePixel Informationsdisplayer (Ja, RGB-modellen är viktigt det också)...
Tills dess – kommentarer och frågor Välkommen.