Verknüpfung zweier Bedingungen geht nicht

Gast #2327860
Lesenswert?

Hallo zusammen,

könnt ihr mir bitte sagen,

warum die else schleife im folgenden Fall nicht durchlaufen wird?


motorstrom=200;
motorstromalt=210;

nur wenn die beiden oberen Werte sich um mehr als 40 voneinander 
unterscheiden soll der neue Wert in der If Bedingung ausgegeben werden.

Zum Test habe ich die Variablen mit festen Werten 200 und 210 belegt, 
aber die If bedingung ist bei mir dennoch leider immer wahr.

Würdet ihr mir bitte sagen woran das liegt?
die Klammern um (motorstrom+40) habe ich auch schon testweise entfernt, 
natürlich bei beiden schleifen. habe es auch schon mit << und >> 
probiert

Viele Grüße,

Matthias.

if (motorstromalt < (motorstrom+40) || motorstromalt > (motorstrom+40))
    {
    lcd_gotopos(3,17); lcd_writezahl(motorstrom) ;   //AD_WErt ausgeben 
als Strom I=U/R
    //lcd_gotopos(1,1); lcd_writezahl(motorstromalt) ;
    }


  else
  {
  lcd_gotopos(1,1); lcd_writetext(" sdfsdfsdfsdfsdfsdfs  ") ;
  }
#2327869
Lesenswert?

> if (motorstromalt < (motorstrom+40) || motorstromalt > (motorstrom+40))


ich vereinfache das mal ein bischen in der Schreibweise. Dann sieht man 
den springenden Punkt besser.


   if (   a < b  ||  a > b  )


mit Ausnahme des Falles a gleich b ist es wohl immer der Fall, dass a 
entweder kleiner als b oder a größer als b ist. Unabhängig davon, welche 
Wetre a bzw b haben.

  if (motorstromalt < (motorstrom - 40) ||    // Minus !
      motorstromalt > (motorstrom + 40) )     // Plus !

oder aber:

Nimm die Differenz ziwschen den beiden Werten. Und wenn die kleiner als 
-40 oder größer als +40 ist, dann unterscheiden sich die beiden um 
mindestens 40
Gast #2327891
Lesenswert?

Karl Heinz Buchegger schrieb:
> if (motorstromalt < (motorstrom - 40) ||    // Minus !
>       motorstromalt > (motorstrom + 40) )     // Plus !
>
> oder aber:
>
> Nimm die Differenz ziwschen den beiden Werten. Und wenn die kleiner als
> -40 oder größer als +40 ist, dann unterscheiden sich die beiden um
> mindestens 40

vielen Dank Euch beiden für die Antwort. Es ist für mich schon spät und 
ich kann nicht mehr so klar denken.

Also hatte ich keinen Syntaxfehler in der Bedingung, sondern diese nur 
falsch gestellt.

wie kann ich den das nun mit der Differenz schreiben? Diesen Weg finde 
ich nämlich auch sehr gut.

Wie kann ich denn den Betrag von dem Ergebnis bilden z.B. 200-210

und dann schreibe ich daraus die Bedingung

if (( motorstromalt-motorstrom)>20 )   // ist es so korrekt, es fehlt 
aber noch die Betragsbildung, die kann ich noch nicht

Viele Grüße,

Matthias.
Gast #2327952
Lesenswert?

danke,

ich teste die funktion in ruhe morgen und auch warum ich nicht selber 
auf die vergleichslösung gekommen bin.

Wieso 20?

das ist ein noch nicht weiter festgelegter wert

bei mir sprang die Stromanzeige immer zwischen 145 und  155 hin und her.

Es soll eine Konstanz herrschen und so genau muss das in meinem Fall 
nicht sein, da die Motorströme in einem Bereich von 150 bis 1A gemessen 
werden sollen.
auf 50mA genau ist mir daher völlig ausreichend.

Mir wird der Motorstrom nur zu oft im program abgefragt, unnötig hohe 
Prozessorbelastung und das LCD-wird unnötig oft beschrieben. Ich kann 
dann schwankende Motorstromwerte aufgrund der schnellen Anzeigewechsel 
auch gar nciht mehr erkennen.

Das muss ich morgen auch noch irgendwie stoppen. Es gibt da wohl im 
Tutorial von uC eine Multitaskinganleitung, da steht wohl drin wie man 
solche Abfragen begrenzt.


Viele Grüße,

Matthias.
Gast #2328056
Lesenswert?

>Es soll eine Konstanz herrschen und so genau muss das in meinem Fall
>nicht sein, da die Motorströme in einem Bereich von 150 bis 1A gemessen
>werden sollen.
>auf 50mA genau ist mir daher völlig ausreichend.

50mA Auflösung bei 150A Meßbereich.
0.03% Nicht schlecht ;)

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