Hallo,
ich versuche mich an einer Erklärung.
Also, diese Wordclock Datei wurde von jemanden konzipiert, der leider schon einige Zeit nicht mehr antwortet und ich versuche diese nun weiter zu entwickeln und benutzbar zu halten-
Was ich möchte, ist eine Umschaltung der LED Farbe des angezeigten Textes auf Button Druck.
Die Farbe der LEDs wird in der Funktion "Switch LED" aufgerufen, und das macht es (vermutlich) auch schwierig...
void SwitchLED(int MyArray[], int n) {
//Umgebungshelligkeit überprüfen (sofern gewünscht)
if (maxBrightness != 0) {
Ambient = analogRead(AmbientLightPin);
//Nur bei größeren Helligkeitsänderungen
//soll die Helligkeit der LEDs angepasst werden:
if ((Ambient > LastAmbient * 1.10) || (Ambient < LastAmbient * 0.90)) {
BRIGHTNESS = map(Ambient, 0, 1023, maxBrightness, minBrightness);
LastAmbient = Ambient;
}
}
//Funktion zum Anschalten der LEDs in warmweiß
for (i = MyArray[0]; i < MyArray[0] + n; i++) {
leds[i] = Functions[colorindex];
//leds[i].setRGB(255, 0, 0); // Red
// HEX Warmweiß | Hier gewünschte LED Farbe (HEX) eintragen
FastLED.setBrightness(BRIGHTNESS);
//leds[i] = CHSV(140, 27, BRIGHTNESS);
// ODER hier gewünschte Farbe in HSV
//( CHSV(FARBE, SÄTTIGUNG, BRIGHTNESS) )
//leds[i].setRGB(255, 68, 221);
// ODER hier gewünschte Farbe in RGB
//( .setRGB(Rot,Grün,Blau) )
}
}
Meine bisherigen Versuche in der Funktion sind gescheitert, weil ich keine Funktion aufrufen kann.
Über den colorindex versuche ich die verschiedenen Farben später "durchzuschalten", allerdings fehlt eine Verknüpfung des Indexes (der im seriellen Monitor schön hochgezählt wird wenn der Button gedrückt wird) zur Farbe.
Meine Lop Funktion sieht bisher so aus:
void loop() {
/* Schleifen Funktion, die die Uhrzeit ausliest
und dann in die entsprechende Funktionen übergibt.
*/
Minute = minute();
int Std = hour();
if (Std > 12)
Stunde = Std - 12;
else if (Std == 0)
Stunde = 12;
else
Stunde = Std;
CheckDST();
displaytime();
FastLED.delay(250);
Serial.println(Stunde);
Serial.println(Minute);
/*Button
// read that state of the pushbutton value;
int buttonVal = digitalRead(buttonPin);
if (buttonVal == LOW && oldButtonVal == HIGH) {
// button has just been pressed
lightPattern = lightPattern + 1;
}
if (lightPattern > nPatterns) lightPattern = 1;
oldButtonVal = buttonVal;
*/
bool buttonVal = digitalRead(buttonPin);
if (!buttonVal && oldButtonVal) {
// button has just been pressed
colorindex = (colorindex + 1) % 16;
Serial.print("colorindex ");
Serial.println(colorindex);
}
oldButtonVal = buttonVal;
switch (colorindex) {
case 1:
pattern1();
break;
case 2:
Rainbow();
break;
case 3:
pattern2();
break;
}
}
Im Versuch einen richtigen Verweis zu bekommen, kam ich auf die Idee, so etwas zu verwenden:
SimplePatternList Functions = {pattern1, Rainbow, pattern2};
um den Aufruf über Functions (in der SwitchLED zu machen, hat aber nicht funktioniert...
leds[i] = Functions[colorindex];
Ich vermute, das ich einen richtigen Verbindung zwischen colorindex und den Farbenfunktionen hinbekommen muss, aber dafür reichen meine bescheidenen Kenntnisse nicht und benötige ein paar Hinweise...
Vielen Dank (auch für alle Geduld)
Arne
Wordclock_basic_button.ino (14.1 KB)