Hi,
arbeite gerade an einer verbesserung meiner lichtsteuerung. Ziel: wenn ich den arduino mal vom strom nehme (n muss), möchte ich, dass er im anschluss wieder einen uhrzeitabhängigen PWM Wert liefert. Dazu habe ich folgende FOrmel überlegt:
Hier definiere ich in einem Array je PWM Kanal die einzelnen Lichtstufen je Stunde:
const byte LED[] = { 5, 0, 1, 14, 11, 4, 9, 6, 7, 10, 2, 12, 13, 8, 7, 13};
int i[16]; // blau1| blau2| blau3| blau4| blau5| weiß1| weiß2| weiß3| weiß4| weiß5| rotli| rotre| 420li| 420re| 400nm| Mond//
// 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 Blau1[] = { 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 3500, 1500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1500, 3500, 4095, 0, 0}
const int Blau2[] = { 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 3500, 1500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1500, 3500, 4095, 0, 0}
const int Blau3[] = { 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 3500, 1500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1500, 3500, 4095, 0, 0}
const int Blau4[] = { 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 3500, 1500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1500, 3500, 4095, 0, 0}
const int Blau5[] = { 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 3500, 1500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1500, 3500, 4095, 0, 0}
DIe Formel sieht wie folgt aus:
void fadeLight() {
if (hour<23) {
i[0] = Blau1[hour] + ((3600000 - (3600000 - ((mins * 60000) + (sec * 1000)))) / (3600000 / (Blau1[hour+1] - Blau1[hour])));
i[1] = Blau2[hour] + ((3600000 - (3600000 - ((mins * 60000) + (sec * 1000)))) / (3600000 / (Blau2[hour+1] - Blau2[hour])));
i[2] = Blau3[hour] + ((3600000 - (3600000 - ((mins * 60000) + (sec * 1000)))) / (3600000 / (Blau3[hour+1] - Blau3[hour])));
i[3] = Blau4[hour] + ((3600000 - (3600000 - ((mins * 60000) + (sec * 1000)))) / (3600000 / (Blau4[hour+1] - Blau4[hour])));
Da die FOrmel immer gleich ist, eben nur eine Variabel/Ziffer ändert (Blau1, Blau2, etc), kann man das sicherlich auch in ein Array verpacken. Leider komm ihc nicht drauf, wie ich das machen muss.
Hier wir dann der Lichtwert gesetzt:
void setLight() {
for (pinCount=0; pinCount<18; pinCount++) {
if (pinCount<14) {
Tlc.set(LED[pinCount], i[pinCount]);
Tlc.update();
}
}
}
Zur Info: Das ist noch nicht compiled.....also die eine oder andere Klammer mag noch falsch sein, aber darum gehts hier auch nicht.