Hi,
ich möchte hier noch mal etwas optimieren:
Aktuell nutze ich die Stunde, die ich über RTC auslese, um meinen PWM Wert (TLC5940) zu setzen. Das ist so programmiert, dass wenn ich den Arduino ein/ausschalte, ich sofort wieder einen Uhrzeitabhängigen PWM Wert für meine Leuchte habe.
Funktioniert soweit super, hier mal der Code:
// 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 PWMchannel[15] [24] = { { 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 3500, 1500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3800, 4095, 4095, 4095},
{ 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 3500, 1500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3200, 4095, 4095, 4095},
{ 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 3500, 1500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2600, 4095, 4095, 4095},
{ 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 3500, 1500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2000, 4095, 4095, 4095},
{ 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 3500, 1500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1400, 4095, 4095, 4095},
{ 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 2500, 1500, 0, 0, 0, 0, 0, 0, 3500, 4095, 4095, 4095, 4095, 4095},
{ 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 2500, 1500, 0, 0, 0, 0, 0, 0, 3500, 4095, 4095, 4095, 4095, 4095},
{ 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 2500, 1500, 0, 0, 0, 0, 0, 0, 3500, 4095, 4095, 4095, 4095, 4095},
{ 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 2500, 1500, 0, 0, 0, 0, 0, 0, 3500, 4095, 4095, 4095, 4095, 4095},
{ 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 2500, 1500, 0, 0, 0, 0, 0, 0, 3500, 4095, 4095, 4095, 4095, 4095},
{ 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 0, 0, 1500, 3500, 4095, 4095, 4095},
{ 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 0, 0, 1500, 3500, 4095, 4095, 4095},
{ 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 1500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4095, 4095, 4095},
{ 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 1500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4095, 4095, 4095},
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0} };
void fadeLight() {
for (pinCount=0; pinCount<15; pinCount++) {
if (hour<23) bruch[pinCount] = (float)3600 / (PWMchannel[pinCount][hour+1] - PWMchannel[pinCount][hour]);
if (hour==23) bruch[pinCount] = (float)3600 / (PWMchannel[pinCount][0] - PWMchannel[pinCount][hour]);
i[pinCount] = PWMchannel[pinCount][hour] + ((3600 - (3600 - ((mins * 60) + (sec * 1)))) / bruch[pinCount]);
}
i[15]=Moon/2;
}
Nachteil: Alle Channels können immer nur zur vollen Stunde starten/enden. Das würde ich gerne auf Minutenbasis bzw. wenn es einfacher ist, auf 10-Schritten-Minutenbasis (also 10,20,30,40,50,0) erweitern, doch ich muss sagen, dass ich hier gerade NULL weiter komme.
Ich würde dazu ja auch den RTC Wert nutzen wollen.
Hat ggfs. jemand direkt einen Ansatz / eine Idee?
Das würde mir zum Einstieg vermutlich schon helfen.
BG
Thorsten