Hallo,

da ich leider mathematisch nix auf dem Kasten habe, benötige ich etwas Hilfe.
Ich möchte gerne ein Objekt auf einen Winkel ausrichten.
Folgende Dinge sind gegeben:
Ist-Winkel
Soll-Winkel
Tolleranz bei der positionierung (tolleranz=2.0)

Winkelangaben kamen von einem Sensor in Form von
0° bis 180° (0° bis 180°)
-180° bis -0° (180° -360°)
In Klammern die Werte wie sie auf einen Kreis bezogen wären.
Das habe ich wie folgt umgerechnet:

Code:
  ist_angle=ToDeg(yaw); //HIER DEN KOMPASSWERT AUSLESEN
    if (ist_angle<0){
     ist_angle=180+(180-(ist_angle*-1)); 
    }
Damit bekomme ich Winkel von 0°-360°
Getestet und funktioniert.

Nun kommt mein Problem.
Mit folgendem Code gebe ich die PWM zum positionieren aus:

Code:
    //Wenn ANGFIX-Modus aktiv dann selber regeln
    if (angfix==1){
      if (ist_angle<=(soll_angle-tolleranz)){
       WritePWM(servo, 1400);  //Rechtslauf
      }
      if (ist_angle>=(soll_angle+tolleranz)){
       WritePWM(servo, 1600);   //Linkslauf
      }
      if ((ist_angle>(soll_angle-tolleranz)) && (ist_angle<(soll_angle+tolleranz))) {
       WritePWM(servo, 1500);   //Neutral
      }
    }

Das funktioniert zwar, aber nur so lange, bis man zum Übergang zwischen 0 und 360 kommt.
Beispiel:
Ein Soll-Winkel von 1° gibt folgende Werte und deren Abweichungen in den o.g. Formeln:
-1° (-)
1° (0)
3° (+)
Da geht es los, denn es gibt keinen negativen Ist-Winkel.


Wie kann man das mathematisch bzw. programmiertechnisch möglichst clever lösen?




Edit:
Zum positionieren wird kein Servo verwendet, sondern ein Motor, welcher mittels Getriebe das Objekt positioniert.