Forum: Compiler & IDEs Annäherungswert in While Schleife


von Mos K. (moscito)


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

von ... .. (docean) Benutzerseite


Lesenswert?

AND ist meiner meinung  nach kein C Standard, oder bin ich jetzt 
verwirrt...

sondern && ist was du suchst...

von Hc Z. (mizch)


Lesenswert?

„AND“ gips in C nicht.  Das heißt „&&“ (oder „&", wenn bitweise).

von Mos K. (moscito)


Lesenswert?

Sackzement! Das ging aber schnell!

Es ist ein Kreuz mit den vielen "angefangenen" Programmiersprachen.

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

Vielen Dank Euch!!!

Moscito

von Klaus (Gast)


Lesenswert?

Mos Kito schrieb:
> Sackzement!

lol :D

von Mos K. (moscito)


Lesenswert?

Für die Lateiner:

Das Wort Sackzement hat seinen Ursprung im mittelalterlichen 
Kirchenlatein und leitet sich von "sacrilegium cementalis" ab.

von Karl H. (kbuchegg)


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 )

von Karl H. (kbuchegg)


Lesenswert?

Im übrigen gibt es in C seit einiger Zeit tatsächlich ein 'and'.
Das schreibt sich aber klein und es muss der Header "iso646.h" 
includiert sein.

http://en.wikipedia.org/wiki/Iso646.h

von Klaus (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Im übrigen gibt es in C seit einiger Zeit tatsächlich ein 'and'.
> Das schreibt sich aber klein und es muss der Header "iso646.h"
> includiert sein.

Narf, aber schön ist das nicht...

von Mos K. (moscito)


Lesenswert?

@ Karl Heinz:

Der Ansatz mit dem Absolutwert ist natürlich um Längen eleganter gelöst. 
Da muss man erst mal draufkommen. Werd's gleich mal reinfriemeln.


#include "floskeln"

Danke ();

von ... .. (docean) Benutzerseite


Lesenswert?

http://www.codeproject.com/KB/cpp/C___Code_Optimization.aspx

-> Boolean Expressions & Range checking

nur mal so neben bei...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.