Abweichung bei einer if-Schleife

Hallo Leute

Ich gebe meinem Roboter zwei Punkte an, den Start- und Endpunkt und die Koordinaten, wo sich der Roboter befindet, werden mir im Serial Monitor angezeigt. Da es aber nicht perfekt ist, gibt es immer kleine Abweichungen bei den Werten, wenn der Roboter zum Beispiel an einem Punkt stehen bleibt. Ich habe vor mit dem Roboter an der x-Achse entlang zu fahren bis mein gemessener x-Wert gleich dem x-Wert von meinem Zielpunkt ist und dann mit dem Roboter zu drehen. So meine Frage wäre ob man bei einer if-Schlaufe auch eine Abweichung einbauen kann, was ich damit meine:

if (current_X  = +/- 2cm target_X) //so etwas hier aber halt so das es im Code eingebaut werden kann
{
}

Nicht so erfahren beim Programmieren, deswegen Frage ich mal.

Erstens:
Es gibt weder If Schleifen, noch If Schlaufen.

Zweitens:
Wenn du eine bestimmt Funktionalität benötigst, dann solltest du dir eine Funktion schreiben, welche dieses erledigt. Oder eine schon vorhandene verwenden.
Alternativ könntest du das alles in der Abfrage unterbringen, aber schön wird das nicht.

Wie man Funktionen schreibt, steht in jedem C++ Buch.
Und die schon vorhandenen Funktionen findest du in der AVR-Libc Doku und der Arduino Referenz.

Okay danke

Du mußt einen Intervall kontrollieren:
Nehme mal an, daß current_X in cm gemessen wird.

if ((current_X < target_X + 2 ) && (current_X > target_X - 2 ))

Eventuell mußt Du kontrollieren ob +/- 2 keine Bereichsüberschreitung hervorruft.

Grüße Uwe

Hi,

ich weiß nicht, ob es einen kürzeren Weg gibt, aber so könnte es aussehen:

Target = …
Abweichung = …
Current = …

if (Current >= Target && Current <= Target + Abweichung || Current <= Target && Current >= Target - Abweichung)
{tu was!}

In Worten:
Ist Current größer/gleich Target UND Current kleiner/gleich Target+Abweichung ODER Current kleiner/gleich Target UND Target größer/gleich Target-Abweichung, dann tu was!

uwefed:
Du mußt einen Intervall kontrollieren:
Nehme mal an, daß current_X in cm gemessen wird.

if ((current_X < target_X + 2 ) && (current_X > target_X - 2 ))

Eventuell mußt Du kontrollieren ob +/- 2 keine Bereichsüberschreitung hervorruft.

Grüße Uwe

current_X und target_X sind als meter angeben aber ich kann ja beide mit 100 multiplizieren und dann ist es ja egal oder gebe einfach 0.02 ein

current_X und target_X sind als meter angeben aber ich kann ja beide mit 100 multiplizieren und dann ist es ja egal oder gebe einfach 0.02 ein

Mache dich über Datentypen kundig.

Wo wäre denn das Problem alle Variablen sind dem float Datentyp zugeordnet, wenn ich also dann 2 einfach durch 0.02 ersetze, sehe ich kein Problem.

Ja, dann machs dir doch in float....

Bisher war der Datentype geheim.
Also tue bitte nicht so, als wäre das schon bekannt gewesen, oder als hätte man sich das denken können.

Übrigens: float verwendet man eher ungern.
u.A. wegen den sich akkumulierenden Rechenfehlern, und weil es recht rechenintensiv ist.

Ja ich hätte die Deklaration auch noch erwähnen können, Entschuldigung dafür und danke für den Hinweis über float.

Ein guter Ratschlag: nimm Typ-Long-Variablen und rechene mit Ganzzahlen ohne Komma.

SpaghettiCode:
Hi,

ich weiß nicht, ob es einen kürzeren Weg gibt, aber so könnte es aussehen:

Target = …
Abweichung = …
Current = …

if (Current >= Target && Current <= Target + Abweichung || Current <= Target && Current >= Target - Abweichung)
{tu was!}

In Worten:
Ist Current größer/gleich Target UND Current kleiner/gleich Target+Abweichung ODER Current kleiner/gleich Target UND Target größer/gleich Target-Abweichung, dann tu was!

Wieso so kompliziert? Wieso kontrollierst Du ob der Wert zwischen Sollwert und Sollwert + Abweichung oder zwischen Sollwert - Abweichung und Sollwert liegt? Wieso nicht gleich zwischen Sollwert - Abweichung und Sollwert + Abweichung?

Grüße Uwe