Moin Achim,
die Timerfunktion hatte ich wie erwähnt etwas umgeschrieben.
Unterer Teil für das Abbremsen:
if (targetFrequency < currentFrequency) {
currentFrequency = max(currentFrequency - maxDecreaseFrequency, targetFrequency);
tone(pinPUL, currentFrequency);
}
Einziger Unterschied wäre hier aber nach meinem Verständnis, dass an tone() keine Frequenz unterhalb von 31Hz (aus tone() Doku) übergeben werden kann. 31Hz ist meine für anlogRead() == 1 festgelegte Mindestfrequenz.
Ich steige allerdings im Moment gleich zu Beginn der Timerfunktion sofort aus wenn der Sollwert 0 ist. Das wäre die Stelle an der ich meinte diesen Wert alternativ zu ignorieren wenn der letzte Ist-Wert einen bestimmten Wert noch nicht unterschritten hat.
Derzeit:
if (targetFrequency >= minFrequency) {
if(!isEnabled) {
digitalWrite(pinEN, LOW); /*Enable*/
currentFrequency = 30; // set currentFrequency high enough for first run
isEnabled = true;
}
}
else {
digitalWrite(pinEN, HIGH); //Disable
currentFrequency = 0;
noTone(pinPUL);
isEnabled = false;
return;
}
So dann mit der Möglichkeit den Sollwert zu ignorieren:
else {
if (currentFrequency < XY) {
digitalWrite(pinEN, HIGH); //Disable
currentFrequency = 0;
noTone(pinPUL);
isEnabled = false;
return;
}
}
Oder halt doch Deinen Code kopieren.
Weizen ist eine gute Wahl
obwohl das für mich eher das Getränk der Begierde an heißen Tagen ist. Gib mir noch ein paar Tage Zeit den Infekt loszuwerden und mal meinen Wagen zu reparieren.
Liebe Grüße
Thorsten
Nachtrag:
Wenn ich den else-Block wie geschrieben ändere, dann wäre hier erstmal natürlich ohne Änderung die Mindestfrequenz nicht mehr gewährleistet
max(currentFrequency - maxDecreaseFrequency, targetFrequency);
Was passiert denn, wenn man tone() z.B. 0Hz übergibt?