Verknüpfung zweier Bedingungen geht nicht

Gast #2327860
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
> 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
#2327883
Deine Bedingung zieht immer, außer wenn
motorstromalt == (motorstrom+40)

Meinstest du vielleicht:
if (motorstromalt < (motorstrom-40) || motorstromalt > (motorstrom+40))


Ich hätte es so geschrieben:
if (abs(motorstrom-motorstromalt)>40)


Gruß Oliver
Gast #2327891
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 #2327919
Ohne jetzt nachgeprüft zu haben:

Um Betrag zu bilden: abs()
Also:
if (abs(motorstromalt - motorstrom) > 20) ....

(Nicht getestet und ohne Garantie...)
Gast #2327952
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
>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

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.