int rcPin = 2; // Eingangssignal vom Empfänger
int ledPin[3] = { 9, 10, 11 }; // Farbe rot an Pin 9, Farbe blau an Pin 10, Farbe gelb an Pin 11
//Farbtabelle von dunkel, gelb, gelborange, rotorange, rot, rose, violett, rotorange, azur, cyan modifiziert
float colR[10] = { 0, 255, 255, 255, 255, 255, 224, 255, 96, 0}; //Rotanteile der Basisfarben
float colB[10] = { 0, 0, 0, 0, 0, 96, 160, 0, 255, 255}; //Blauanteile der Basisfarben
float colG[10] = { 0, 255, 176, 96, 0, 0, 64, 96, 255, 0}; //Gelbanteile der Basisfarben
float colH[10] = { 100, 30, 40, 60, 90, 75, 80, 90, 90, 100}; //gewichtete Basishelligkeit
int ledHell[3]; // Zahlenwert zwischen 0 und 255 – gibt die Leuchtstärke des einzelnen Kanals an
int rcSignalAbs; // PWM Eingangssignal in µs
int rcSignalRel; // PWM Eingangssignal relativer Prozentwert
int l, p, f; // Loopzähler
int colNr; //Farbnummer
long colZF, colF;//Zufallszahl Farbflackern
void setup()
{
randomSeed(analogRead(A0));//startet den Pseudo-Zufallsgenerator
pinMode(rcPin, INPUT);// Definiert den RC-Pin als Eingang
for (l=0; l<3; l++) {
pinMode(ledPin[l], OUTPUT);// Schleife definiert die LED-Anschlüsse als Ausgänge
}
}
void loop()//hier beginnt das Hauptprogramm
{
rcSignal ( );//Unterroutine Empfängersignal einlesen aufrufen
farbFlackern ( );// Unterroutine Flackern berechnen aufrufen
ledAusgabe ( );// Unterroutine LED ansteuern aufrufen
}//hier endet das Hauptprogramm
int rcSignal ( ) // Unterroutine RC Signal einlesen
{
rcSignalAbs = pulseIn(rcPin, HIGH);// RC-Signal in µs lesen
rcSignalRel = map(rcSignalAbs, 1500, 1950, 0, 255);//Werte zwischen Halbgas 1500µs und 1950µs Vollgas werden verarbeitet
rcSignalRel = constrain(rcSignalRel, 0, 255);//negative Werte abfangen
return rcSignalRel;
}
int farbFlackern ( ) // Unterroutine Flackern berechen
{
colZF = random(-20,60);
if (colZF < 0) {
colF = -1;
} else if (colZF > 50) {
colF = 1;
} else {
colF = 0;
}
colNr = map(rcSignalRel, 0, 255, 0, 8); //Farbwert zu Gasstellung ermitteln
if (colNr == 0) {
colF = 0; //wenn Farbwert 0 (LED aus) dann kein Flackern
} else if (colNr > 5) {
colNr = colNr + (2 * colF); // starkes Farbflackern
} else {
colNr = colNr + colF; // Farbflackern
}
colNr = constrain(colNr, 0, 9);
}
int ledAusgabe ( ) //Unterroutine LED ansteuern
{
ledHell[0] = int(colR[colNr] * colH[colNr] / 100);// Rotwert der Farbe holen und gewichten
ledHell[1] = int(colB[colNr] * colH[colNr] / 100);// Blauwert der Farbe holen und gewichten
ledHell[2] = int(colG[colNr] * colH[colNr] / 100);// Grünwert der Farbe holen und gewichten
for (p=0; p<3; p++)
{
analogWrite (ledPin[p], ledHell[p]);
}
}