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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.