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?
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.
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.
1
uint16_tadcval=120;
2
3
if(adcval>0&&adcval<620)// liegt der ADC Wert zwischen 0 und 620
4
{
5
tuwas_1();
6
}
7
8
if(adcval>620&&adcval<768)// liegt der ADC Wert zwischen 620 und 768
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.
Du schreibst "if adcval > 0". Bei Dir wird das Programm also bei 0
nichts tun.
Vorschlag :
1
uint16_tadcval=120;
2
3
if(adcval<=620)// liegt der ADC Wert zwischen 0 und 620
4
{
5
tuwas_1();
6
}
7
8
if(adcval>620&&adcval<768)// liegt der ADC Wert zwischen 621 und 767
9
{
10
tuwas_2();
11
}
> 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.
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.
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: