Problem:

Ein Rob mit 2 Schrittmotoren soll sich exact nach Süden ausrichten.
Mit dem Kompassmodul eigentlich sehr einfach. Wenn der Rob aber auf 5Grad steht und das Ziel 290Grad ist, ist dann links herum oder rechts herum der kürzere Weg. So einfach dies klingt, ist es doch kniffeliger als man dies denkt.

Lösung:

do
Call Kompass() ' hier wird der aktuelle Kompasswert eingelesen und in ganzen Grad in der Variable Himmelrichtung abgelegt.
Ist = Himmelsrichtung
Soll = Kompassziel ' hierhin soll er sich drehen

If Soll > Ist Then ' da Variablen als Word definiert, arbeite ich ohne negative Zahlen
Diff = Soll - Ist
Else
Diff = Ist - Soll
End If

If Diff < 1 Then ' 1 Grad Abweichung lassen wir zu
Zielerreicht = 1
Print "Ziel erreicht : " ; Himmelsrichtung
End If

If Diff > 180 Then
If Soll > Ist Then
Drehe = 0 ' Motoren müssen links herum drehen
Else
Drehe = 1 ' Motoren müssen rechts herum drehen
End If
Else
If Soll > Ist Then
Drehe = 1 ' Motoren rechts herum
Else
Drehe = 0 ' Motoren links herum
End If
End If

' jetzt gemäß ver Variable Drehe den Motor drehen lassen
' dieser Code ist abhängig von Eurer Motorenansteuerung
' für Schrittmotorensteuerung RNMOTOR kann ich Euch gerne das ganze Programm zukommen lassen.

Waitms 200 ' lass den Rob zur Ruhe kommen

Loop Until Zielerreicht = 1

ACHTUNG!

Bie Verwendung von Schrittmotoren immer nur einen Schritt gehen und wieder neu prüfen. Bei Verwendung von Getriebemotoren sollte die Toleranz von Diff auf 5 Grad gestellt werden. In jedem Falle immer langsamen Schrittes oder mit niedrigster Geschwindigkeit drehen!