Gast
#3030406
Haalo, Irgendwie steh ich grad auf'n Schlauch. Ich möchte den ADC-Wert vergleichen, leider haut mein Vergleich nicht hin.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
|
Anzeige
|
IF Vergleich zwischen 2 werten
Gast
#3030406
Haalo, Irgendwie steh ich grad auf'n Schlauch. Ich möchte den ADC-Wert vergleichen, leider haut mein Vergleich nicht hin.
Gast
#3030412
Andreas schrieb: > leider haut mein Vergleich nicht hin. was haut denn da nicht hin? Wenn adcval = 0 ist, gleich 620 ist oder größer/gleich 768 passiert gar nichts, soll das so? Doppelpunkte durch Semikolon ersetzen? Beim Wert 0 oder 620 soll doch bestimmt auch etwas passieren. Da ein uint16_t nie negativ werden kann, reicht:
adcval ist nicht initialisiert. Der Compiler kann annehmen, daß die Vergleiche immer falsch sind und Vergleiche same if-Blöcke wegwerfen. Fabian O. schrieb: > [Komplett anderen Code] Das sind aber Vergleiche, die mit dem Original nix zu tun haben.
Gast
#3030885
adcval soll verglichen werden ob es zwischen 0 u. 620 , 620 u. 768 . Das sollte so sein wenn Zb. adcval =120 sollte ja der erste vergleich passen. Oder ist meine Vorgehensweise nicht dafür geeignet.
Die interessanten Fälle sind diese: Was soll passieren, wenn adcval = 0 ist? Was soll passieren, wenn adcval = 620 ist? Was soll passieren, wenn adcval = 768 ist? In Deinem Code passiert in diesen Fällen nichts. Wenn Du das so willst, dann stimmt er. Ansonsten nicht.
Gast
#3030927
Du schreibst "if adcval > 0". Bei Dir wird das Programm also bei 0 nichts tun. Vorschlag :
> adcval soll verglichen werden ob es zwischen 0 u. 620 , 620 u. 768
Und bei genau 620 ?
ob <= 620 oder >= 620 muss Du entscheiden.
Ausser Du möchtest, dass bei 620 nichts passiert.
Beachte noch :
(adcval > 620 && adcval < 768)// liegt der ADC Wert zwischen 621
und 767
Das nächste was ich tun würde:
if - else Ketten aufzubauen.
Jeder Grenzwert, den du in deinem Code 2-mal angibst, ist einmal zuviel.
Jedes mal, wenn du den Wert hinschreibst öffnest du eine potentielle
Fehlerquelle.
Schreibst du
if( adcval <= 620 )
..
else
...
dann ist automatisch klar, dass im else-Zweig adcval größer als 620 sein
MUSS! Das kann gar nicht anders sein, denn wenn adcval kleiner/gleich
620 wäre, dann würde der Code nicht ins else kommen, sondern den
then-Zweig vom if nehmen
if( adcval <= 620 ) // 0 bis 620, jeweils inklusive
....
else if( adcval <= 768 ) // 621 bis 768. jeweils inklusive
...
else if( adcval <= 1000 ) // 769 bis 1000. jeweils inklusive
...
else // größer als 1000
...
hier steht jeder Grenzwert nur ein einziges mal im Code. Bei einer
Veränderung eines Grenzwertes brauche ich also nur EINEN Wert anzupassen
und nicht 2. Werden die 620 auf 640 erhöht, dann geschieht das an EINER
Stelle und der nachfolgende Abfragebereich verkleinert sich ganz von
alleine. D.h. ich laufe nicht Gefahr, dass ich hier einen Fehler mache
und den nachfolgenden Bereich vergesse anzupassen.
Gast
#3031028
Ich frage mich: was haut denn nicht hin?
Gast
#3031964
Wenn ich das so mach wie vorgeschlagen,
1.hauts nicht hin
2.bekomm ich beim 3 else error: expected ';' before '{' token
Andreas schrieb: > else ( adcval <= 730 ) Beim else einen Vergleich machen kann auch nicht gehen. Andreas schrieb: > 2.bekomm ich beim 3 else error: expected ';' before '{' token > > else ( adcval <= 730 ) // Grösser 730 else if ( adcval <= 730 ) **** Grundlegende Kenntnisse der Programmiersprache setze ich eigentlich schon vorraus. So ungefähr auf dem Level: 1. Unterrichtseinheit - 1. Stunde. Tu dir selbst einen Gefallen und kauf dir ein C-Buch und arbeite zumindest das erste Drittel durch.
Gast
#3031981
Es war heut schon ein langer Tag. trotzdem danke. mfg Es hilft auch ungemein, wenn man sich etwas Mühe bei der Codeformatierung gibt. Nicht nur den Forenmitgliedern, die den Code lesen sollen, sondern auch Dir selber beim Finden von Fehlern. Dazu gehört u.a., dass man die geschweiften Klammern auf die gleiche Ebene wie das if bzw. else setzt und Leerzeichen einheitlich verwendet:
Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|