IF Vergleich zwischen 2 werten

Gast #3030406
Lesenswert?
• ▲
▼
Haalo,
Irgendwie steh ich grad auf'n Schlauch.
Ich möchte den ADC-Wert vergleichen,
leider haut mein Vergleich nicht hin.
1
uint16_t  adcval;
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
9
   {
10
   tuwas_2():
11
   }
#3030418
Lesenswert?
• ▲
▼
Beim Wert 0 oder 620 soll doch bestimmt auch etwas passieren. Da ein 
uint16_t nie negativ werden kann, reicht:
1
uint16_t adcval;
2

3
if (adcval <= 620) // liegt der ADC Wert zwischen 0 und 620
4
{
5
  tuwas_1();
6
}
7
else if (adcval <= 768) // liegt der ADC Wert zwischen 621 und 768
8
{
9
  tuwas_2();
10
}
Gast #3030885
Lesenswert?
• ▲
▼
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_t adcval = 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 
9
{ 
10
tuwas_2();
11
 }
Gast #3030927
Lesenswert?
• ▲
▼
Du schreibst "if adcval > 0". Bei Dir wird das Programm also bei 0 
nichts tun.


Vorschlag :
1
uint16_t adcval = 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
#3030994
Lesenswert?
• ▲
▼
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 #3031964
Lesenswert?
• ▲
▼
Wenn ich das so mach wie vorgeschlagen,
1.hauts nicht hin
2.bekomm ich beim 3 else error: expected ';' before '{' token
1
if( adcval <= 512 )        // 0 bis 512
2
 {
3
  DrawLine_RGBColor(x_mitte + xpos, y_mitte + ypos,x_end +  xpos, y_end + ypos,255,255,255);
4
 }
5

6
else if( adcval <= 620 )   // 513 bis 620
7
 {
8
  DrawLine_RGBColor(x_mitte + xpos, y_mitte + ypos,x_end +  xpos, y_end + ypos,255,255,0);
9
 }
10

11
else ( adcval <= 730 )  // Grösser 730
12
 {
13
  DrawLine_RGBColor(x_mitte + xpos, y_mitte + ypos,x_end +  xpos, y_end + ypos,255,0,0);
14
 }
15

16

17
Das hier funktioniert.
18

19
if (adcval > 0 && adcval < 512 )        // 0 bis 511
20
 { 
21
  DrawLine_RGBColor(x_mitte + xpos, y_mitte + ypos,x_end +  xpos, y_end +   ypos,255,255,255);
22
 } 
23

24
if (adcval > 511 && adcval < 620)        // 511 bis 619
25
 { 
26
  DrawLine_RGBColor(x_mitte + xpos, y_mitte + ypos,x_end +  xpos, y_end + ypos,255,255,0);
27
 }
28
 
29
if (adcval > 619)        // Grösser als619
30
 { 
31
  DrawLine_RGBColor(x_mitte + xpos, y_mitte + ypos,x_end +  xpos, y_end + ypos,255,0,0);
32
 }
#3031975
Lesenswert?
• ▲
▼
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.
#3031985
Lesenswert?
• ▲
▼
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:
1
if (adcval < 512) // 0 bis 511
2
{
3
  DrawLine_RGBColor(x_mitte + xpos, y_mitte + ypos, x_end + xpos, y_end + ypos, 255, 255, 255);
4
} 
5
else if (adcval < 620) // 512 bis 619
6
{ 
7
  DrawLine_RGBColor(x_mitte + xpos, y_mitte + ypos, x_end + xpos, y_end + ypos, 255, 255, 0);
8
}
9
else // 620 oder größer
10
{ 
11
  DrawLine_RGBColor(x_mitte + xpos, y_mitte + ypos, x_end + xpos, y_end + ypos, 255, 0, 0);
12
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.