Logik Problem beim Zählen

Hallo,

ich bekomme neue Positionen für meinen Servo über die Variable new_pos gelifert. Die Variable pos ist dann die, die dem Servo übergeben wird.
Bei einer Änderung der Position, also einem neuen new_pos soll das Servo langsam dahin bewegt werden. Dies mache ich mit:

if (pos!=new_pos){myservo.attach(10); pos=pos+0.1*(new_pos-pos)/abs(new_pos-pos); }

Angenommen, die neue Position lautet 28.0 dann dreht das Servo so lange, bis 28.0 erreicht ist. Die Richtung bekomme ich über 0.1*(new_pos-pos)/abs(new_pos-pos). Das Problem bei der ganzen Sache ist, dass meine Position am Ende der Bewegung immer zwischen 27.9 und 28.0 hin und her springt. Eigendlich müsste sie doch aufgrund von if pos!=new_pos dann immer exakt auf 28.0 stehen bleiben?

Vergleiche auf Fließkommazahlen gehen meistens schief, weil unsere dezimalen Fließkommazahlen oft nicht genau einem binären Äquivalent entsprechen und damit ungenauigkeiten rein kommen.

Ich weiß nicht, wo Du den Wert her bekommst aber versuche sehr früh in der Ermittlung einen Ganzzahlwert für die Steuerung zu bilden und zu nutzen.
Die Fließkommazahl kannst Du ja nebenher für die Anzeige immer noch bilden.

Gruß Tommy

Hi,
Messwerte können immer um 1bit schwanken wird auch als LSB bezeichnet.

Ich weiß ja nicht was du für eine Lib benutzt, normal bleibt so ein Servo immer im geregelten Zustand damit schwankt er zwischen den beiden werten hin und her.

Die Servo Lib die ich kenne arbeitet auch mit integer werten.
Heinz

...pos+=0.1*(new_pos>pos)?1:-1;

Sollte das Gleiche machen mit weniger Rechenpower.
Wenn Deine Servo-Lib eigentlich auch nur Ganzzahlen (ohne Komma) haben will, kannst Du die Berechnung auch per millis() auseinander ziehen und ganze Zahlen übergeben.
Spart dann etwas Speicher und wohl auch Rechenzeit.

MfG