Neuer Bugfix und experimenteller Code

soooo,
ich starte das neue Jahr nochmal mit nem Update: Es ist aufgefallen das bei bestimmten Zeiteinstellungen in der Dimmung der Controller sich verrechnet. Somit kommt ein PWM Wert von 4097 zu stande was natürlich nicht geht. Man sieht es bei der Lampe dass eine Sekunde vor 100% die Lampe kurz aus geht. Beheben des Problems ist sehr einfach:
in der Datei Licht ino muss sehr weit unten eine Bedingung eingefügt werden die diesen Rechenfehler abfängt:

if(pwm<=0){ pwm=0; }else if (pwm>4095){
pwm=4095;
}

Das ganze sieht dann so aus:

.............
f= dimTime/(Max-Min); // 1800/2800=0,64
p = pastSeconds/f; // 1616 / 0,64=2525
pwm=Min+p;
if(pwm<=0){ pwm=0; }else if (pwm>4095){
pwm=4095;
}
return pwm; // Im Nofall ausschalten...
}

Ich habe die IDE bereits geändert und beispiele auf den neusten stand gebracht.

Weiterhin habe Ich mich auch dem Problem angenommen was Dirk gepostet hatte mit den Weniger Schaltzeiten. Hierfür ist die Dimmung nen bisschen gravierender Umgeschrieben wurden und daher experimentel. Ich kann es z.z. leider nicht live testen, daher poste ich den Code einfach mal als Beta wenn es jemand ausprobieren möchte:
Die gesamte Funktion PWM_Licht einfach überschreiben!

int PWM_Licht(int lightIndex){

long Max,Min,pwm=4095;
float dimTime,f,p;
float pastSeconds;
uint32_t Start,Ende;
byte oMin,oMax;

if(light_channels[lightIndex][0].time < rtc.daystamp){ Start = light_channels[lightIndex][LIGHT_VALUES-1].time; Ende = light_channels[lightIndex][0].time; oMin = light_channels[lightIndex][LIGHT_VALUES-1].level; oMax = light_channels[lightIndex][0].level; pastSeconds = get_ts(24,0,0)-Start+rtc.daystamp+0.5; dimTime = get_ts(24,0,0) - Start + Ende+0.5; } else if(light_channels[lightIndex][LIGHT_VALUES-1].time < rtc.daystamp ){ Start = light_channels[lightIndex][LIGHT_VALUES-1].time; Ende = light_channels[lightIndex][0].time; oMin = light_channels[lightIndex][LIGHT_VALUES-1].level; oMax = light_channels[lightIndex][0].level; pastSeconds = rtc.daystamp-Start+0.5; dimTime= get_ts(24,0,0) - Start + Ende+0.5; } else { int curIndex=0; for(byte n=0;n4095){
pwm=4095;
}
return pwm;
}

Schönen start ins Jahr wünsche ich!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.