Förbättra fiberoptiska display med lysdioder och mikro-controller. (4 / 4 steg)
Steg 4: Programmera den
Jag försökte några RGB färg cykel program, men slutade med att kraftigt ändra någon annan program. Jag la några randimizations för att göra skärmen mindre statiska, och förhoppningsvis mer intressant. Här är den aktuella versionen.
/*******************************************************\
* RGB_Fade *
* Skapade för användning av gemensamma! katod! RGB-lysdioder. *
* Cyklar genom de tre färger, tonar in och ut. *
* Stiften används måste PWM(~) stift. *
* *
* Författare: Anthony Weber *
* Datum skapad: 03 April 2012 *
* *
* Något modifierad av Hippynerd (hippynurd *
* att göra övergångar mjukare och göra cyklingen *
* mer intressant. *
\*******************************************************/
Färg Pin variabler
int redPin = 11; Är det inte uppenbart?
int greenPin = 10;
int bluePin = 9;
Timing inställningar variabler
int fadeSpeed = 1; Detta är hur mycket varje LED ändras på varje steg.
int fördröjningstid = 1; fördröjning mellan cykler.
int delayCount = 1;
int randCount = 10;
Obs: Jag försökte göra fadeSpeed slumpmässigt, men dåliga saker hänt.
Andra variabler. Behöver inte ändra dessa.
int rött = 0; Utgångslägen.
int grön = 0; Om du ändrar dessa, eftersom koden är inställd
int blå = 255; för att starta vid blå, kan det verka roligt på den första cykeln.
int läge = 0; 0 - blå lila, 1 - lila röd, 2 - röd till gul,
3 - gul-grön, 4 - grön till aqua, 5 - aqua blå
void setup() {//3-5-g-6
deklarera stift 9 vara en utgång:
pinMode (bluePin, produktionen); blå
pinMode (greenPin, produktionen); grön
pinMode (redPin, produktionen); röd
}
void loop() {
Light 'em!
analogWrite (bluePin, blå);
analogWrite (greenPin, grön);
analogWrite (redPin, röd);
Nu ändra 'em!
om (läge == 0) {//blue till lila;
om (röd > = 255) {//change platser!
läge = 1;
Delay(delaytime*50); Ändra inte direkt.
} annat {
röd += fadeSpeed;
}
}
annars om (läge == 1) {//purple till rött
om (blå < = 0) {//change platser!
läge = 2;
Delay(delaytime*50); //dont förändring direkt.
} annat {
blå-= fadeSpeed;
}
}
annars om (läge == 2) {//red till gul
om (grön > = 255) {//change platser!
läge = 3;
Delay(delaytime*50); //dont förändring direkt.
} annat {
gröna += fadeSpeed; ///2; Jag bromsa detta eftersom det verkar att blinka av för snabbt.
om (grön > 255) grön = 255;
}
}
annars om (läge == 3) {//yellow till grönt
om (röda < = 0) {//change platser!
läge = 4;
Delay(delaytime*50); //dont förändring direkt.
} annat {
röd-= fadeSpeed;
}
}
annars om (läge == 4) {//green till aqua
om (blå > = 255) {//change platser!
läge = 5;
Delay(delaytime*50); //dont förändring direkt.
} annat {
blå += fadeSpeed;
}
}
annars om (läge == 5) {//aqua till blå
om (gröna < = 0) {//change platser!
läge = 0;
Delay(delaytime*50); //dont förändring direkt.
} annat {
gröna-= fadeSpeed;
}
}
Denna försening fungerar ganska bra, men gärna
ändra detta om du vill ha en snabbare men smidigare fade.
Ändrade dröjsmål till slumpmässigt för roligare display.
delayCount ++;
om (delayCount > = randCount) {
delayCount = 1;
randCount = random (500, 5000);
fördröjningstid = random (1, 150); Random förseningar att hålla saker intressant
}
Delay(delaytime);
}