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 ") ; }
> 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
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
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.
Matze05 schrieb: > if (( motorstromalt-motorstrom)>20 ) // ist es so korrekt, es fehlt > aber noch die Betragsbildung, die kann ich noch nicht abs(...) - diese Funktion findest du in der stdlib Gruß Oliver
Ohne jetzt nachgeprüft zu haben: Um Betrag zu bilden: abs() Also: if (abs(motorstromalt - motorstrom) > 20) .... (Nicht getestet und ohne Garantie...)
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.
>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 ;)
Matze05 schrieb: > die else schleife Ist das die Schwester der if-Schleife? http://www.if-schleife.de
Lothar Miller schrieb: > Matze05 schrieb: >> die else schleife > Ist das die Schwester der if-Schleife? > http://www.if-schleife.de :-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.