Annäherungswert in While Schleife

OP #1756644
Lesenswert?

Mahlzeit zusammen,

ich bräuchte mal bitte etwas Unterstützung, da ich noch nicht ganz 
sattelfest bin in C.

Aufgabenstellung ist einen Motor mit Poti auf eine bestimmte Position zu 
fahren. Da beim Stoppen der Sollwert des Potis fast immer überfahren 
wird, würde ich es gerne mit einem Annäherungswert lösen.
Also: Fahre auf Position x +/- 10 ADC Einheiten.
Beim compilieren dieser while Anweisung streikt der GCC allerdings 
(...expected ')' before AND) :

//snip
1
void gotopos (uint8_t motor, uint16_t position)
2
  {
3
  while (((adcwert (motor)) < (position + 10)) AND (((adcwert (motor)) > position - 10)))
4
    {
5
                      // Motor fahren in die eine oder andere Richtung ...
6
    }
7
  }
//snap

"adcwert()" ist natürlich eine Funktion, der der ADC Kanal (motor) 
übergeben wird und die einen uint16_t zurück gibt. Position ist ein Wert 
zwischen 0 und 999.

Ich weiß, dass die AND Verknüpfung bei IF Abfragen funktioniert.
Bei While vielleicht nicht?

Für alle Hinweise zum Täter bin ich sehr dankbar.

Thx

Moscito
#1756682
Lesenswert?

Mos Kito schrieb:

> && ist natürlich richtig und funzt auch (schäm).

Wenn man es genau nimmt, solltest du allerdings den ADC nur einmal 
befragen. Ansonsten kann es sein, dass die erste Abfrage ein anderes 
Ergebnis liefert als die 2-te Abfrage.

Solche Abfragen kommen in der Gleitkommaprogrammierung häufig vor:
Sind 2 Werte bis auf eine bestimmte Epsilon Umgebung als gleich 
anzusehen?

Und programmiert wird das so:

bei Gleitkommawerten
1
  if( fabs( Wert - Vergleichswert ) < Epsilon )
bzw. bei Integer
1
  if( abs( Wert - Vergleichswert ) < Epsilon )

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren