Hallo!
Ich werte mit nem mega32 einen RC-Empfänger aus. Bei einigen Stickkombinationen und wildem Rumgerühre springt einer der ausgelesenen Werte manchmal. Ich denke, dass ich an der Auswertung selber nichts verbessern kann, deswegen würde ich gerne die ausgelesenen Werte auf ihre Richtigkeit hin überprüfen und falsche Werte rausschmeissen.
Das Ganze sollte natürlich möglichst wenig Rechenzeit in Anspruch nehmen. Einfach einen starken Tiefpass einprogrammieren kann ich auch nicht, dann wird die Reaktion auf die Knüppel zu langsam.
Bisher mache ich es so:
sempf(i) ist das Signal aus dem Empfänger für die 4 Kanäle, das Signal geht von -37 bis +37
Mit dem Code wird also überprüft, ob der neue Wert sich um mehr als "50" vom alten Wert unterscheidet. Falls das so ist wird der alte Wert weiterverwendet.Code:'wenn neues signal mehr als 50 vom alten signal abweicht, dann altes signal halten. For I = 1 To 4 If Sempf(i) > Aempfh(i) Or Sempf(i) < Aempfl(i) Then 'wenn ausserhalb der Grenzen Sempf(i) = Aempf(i) 'neuer Wert = alter wert End If Aempf(i) = Sempf(i) 'alter wert = neuer Wert Aempfh(i) = Sempf(i) + 50 'obere Grenze Aempfl(i) = Sempf(i) - 50 'untere Grenze Next
Dadurch ergeben sich einige Probleme. Wenn ich die Sticks ganz schnell bewege, dann werden die neuen Werte nicht mehr akzeptiert. Und zwar werden die so lange nicht akzeptiert, bis ich den Stick wieder da hin bewegt habe wo die schnelle Bewegung gestartet wurde.
Gibt es elegantere Methoden um "Ausreisser" zu detektieren und auszusortieren? Zur Not muss ich doch einen Tiefpass nehmen.......
Vielen Dank für eure Tipps!
Lesezeichen