Ein Nachteil des letzten Programmes besteht darin, dass es sechs Funktionen zum Steuern der einzelnen Farben gibt. Da sich diese Funktionen bis auf wenige Unterschiede ähneln, können sie zu einer einzigen Funktion zusammengefasst werden. Damit verkürzt sich das Programm ungemein.
Weiterhin wird eine Lichtsteuerung eingebaut, die die LED nur dann aufleuchten lässt, wenn ein Helligkeitswert unterschritten wird. Damit hat man ein lustiges Nachtlicht.
Zu Beginn werden die notwendigen Variablen deklariert. Da jetzt ein Array zur Steuerung der Helligkeiten verwendet wird, werden den drei Farben die Werte 0, 1 und 2 zugeordnet. Am Anschluss 4 ist jetzt der gemeinsame Anschluss aller drei LED angeschlossen. Liegt dieser Pin auf 1, leuchten die LED, liegt er auf 0 sind alle aus. Damit kann eine Helligkeitssteuerung erfolgen. Die eigentliche Helligkeitssteuerung übernimmt nun die Funktion licht(). Sie benötigt zwei Werte, die ihr beim Aufruf übergeben werden müssen: die Farbe in Form einer der drei Variablen rot, gruen oder blau und ein Wert 1 oder 0, der festlegt, ob das Licht an- oder ausgehen soll. licht(rot, 1) bedeutet also: rote LED anschalten und licht(blau,0): blaue LED ausschalten. In der Funktion licht() wird entsprechend der gewünschten Richtung (an oder aus) die Variable schritt_h mit der positiven oder negativen Schrittweite versehen. Danach wird aus dem Array helligkeit[ ] der aktuelle Helligkeitswert der Farbe ausgelesen und der Variablen h_farbe zugewiesen. In der folgenden do...while-Schleife wird die neue Helligkeit berechnet, der Wert an den Farbpin gegeben, gewartet und dann die Intensität des Umgebungslichtes bestimmt. Wie das erfolgt, wurde auf einer vorhergehenden Seite beschrieben. Ist das Licht unter einer Grenze, wird der Schalter eingeschaltet und die LED leuchtet. Wenn nicht, bleibt die LED dunkel. An Ende der Schleife wird geprüft, ob sie noch einmal durchlaufen werden muss. Wenn nicht, wird der aktuelle Helligkeitswert in das Array zurükgeschrieben.
|
int rot=0; int gruen=1; int blau=2; int helligkeit[3]; int PIN[]={3,5,6}; int schalter=4; int schritt = 1; int warten=10; boolean an=HIGH; boolean aus=LOW; int lichtgrenze=3; void setup() { for (int i=0; i<=2;i++) { pinMode(PIN[i], OUTPUT); analogWrite(PIN[i], 255); helligkeit[i]=255; } pinMode(schalter, OUTPUT); digitalWrite(schalter, an); licht(rot, 1); licht(gruen, 1); licht(blau, 1); } void loop() { licht(rot, 0); licht(blau, 0); licht(rot, 1); licht(gruen, 0); licht(blau, 1); licht(gruen, 1); } void licht(int farbe, int anaus) { int schritt_h =schritt; if (anaus==1) { schritt_h=-schritt; } int h_farbe=helligkeit[farbe]; do { h_farbe=h_farbe+schritt_h; analogWrite(PIN[farbe], h_farbe); delay(warten); int licht=analogRead(A0); int umgebung = map(licht, 0, 1023, 0, 7); if (umgebung<lichtgrenze) { digitalWrite(schalter, aus); } else { digitalWrite(schalter, an); } } while ((h_farbe>0) && (h_farbe<255)); helligkeit[farbe]=h_farbe; } |