Hi,
welche KSQ nutzt du denn?
Hier mal ganz kurz und knapp mein ANsatz:
Zunächst habe ich Beleuchtungsarrays definiert (nur ein Ausschnitt, eine Zeile je PWM out:
// 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23
const int lightArray[16] [24] = { { 4095, 4095, 4095, 4095, 4095, 4095, 4095, 3500, 2500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3500, 4095, 4095, 4095 },
In der Loop frage ich regelmäßih Uhrzeit und PWM values ab
void loop()
{
getTime(); // die entsprechende FUnktion ist relativ ähnlich wie aus den Beispielsketches, hier nicht aufgeführt
getLight();
setLight();
PWM value wird für jeden der 16 Kanäle (bei mir) berechnet
void getLight() {
for (int i=0; i<16; i++) {
if (hour<23) valueLight[i] = fadeLight(mins, sec, lightArray[i][hour+1], lightArray[i][hour]);
else if (hour==23) valueLight[i] = fadeLight(mins, sec, lightArray[i][0], lightArray[i][hour]);
}}
int fadeLight(int minute, int sekunde, const int PWMvalueSoon, const int PWMvalueNow) {
float bruch = (float)3600 / (PWMvalueSoon - PWMvalueNow);
int result;
result = PWMvalueNow + ((3600 - (3600 - ((minute * 60) + (sekunde * 1)))) / bruch);
return result;
}
Alles anzeigen
Und dann wird der Wert gesetzt
void setLight() {
for (int i=0; i<16; i++) {
Tlc.set(LED[i], valueLight[i]);
Tlc.update();
}
}
Ist ein alter COde von mir, habe gerade keinen aktuelleren hier, sollte aber vom Ansatz her helfen
BG
//EDIT
nicht wundern, der TLC arbeitet mit 12Bit, daher Werte bis 4095.
Zudem musste ich Aufbau bedingt die Werte invertieren, d.h. PWM=0 entspricht hier 100%.
Ist aber irrelevant für den Ablauf.