Alternative zu If-Abfrage eines eintreffenden, schwankenden Signals

Aloha :slight_smile:

Per pulseIn() lese ich ein ankommendes, leicht schwankendes Funksignal aus.
Bsp.:
pulseIn() liegt zwischen 0 und 255
Der Signalwert den ich sende soll 5 sein. Da es aber schwanken kann (Funkübertragung) frage ich es so ab:
if(eingehendesSignal >0 && <10) { ... }
if(eingehendesSignal >10 && <20) { ... }
if(eingehendesSignal >20 && <30) { ... }
if(eingehendesSignal >30 && <40) { ... }
...
...
...
Somit kann das Signal ruhig mal bei 6 oder auch nur bei 2 liegen ohne das ich auf jeden einzelnen Wert eingehen muss.
Kann man das Ganze auch anders (kürzer / eleganter) gestalten?

Gruß,
Christian

Da sollte auch mit "Switch / Case" funktionieren.

Wenn das nicht lediglich Pseudo-Code ist, passt das nicht ganz:

if(eingehendesSignal >30 && eingehendesSignal < 40)

Ansonsten den Wert erst mal durch 10 Teilen. Dann hast du nur noch Werte von 0 - 25. Die kann man dann mit == oder switch/case behandeln

Serenifly:
Ansonsten den Wert erst mal durch 10 Teilen. Dann hast du nur noch Werte von 0 - 25. Die kann man dann mit == oder switch/case behandeln

@Serenifly

Warum sollen die Werte noch durch 10 geteilt werden?
Ich habe Switch/case bisher nur bis ">59" angewendet, daher würde mich das interessieren.

Aloha :slight_smile:

Wenn das nicht lediglich Pseudo-Code ist, passt das nicht ganz:

:grinning: Jepp, ist natürlich Pseudo-Code! Zur einfacheren Veranschaulichung so kurz && logisch wie möglich :wink:

Ansonsten den Wert erst mal durch 10 Teilen. Dann hast du nur noch Werte von 0 - 25. Die kann man dann mit == oder switch/case behandeln

Das wäre natürlich auch ein Lösungsansatz. Muss ich mal ausprobieren. Danke :slight_smile:

Gruß,
Christian

HotSystems:
Warum sollen die Werte noch durch 10 geteilt werden?

Weil du dann nur noch 25 Werte hast die alles abdecken. Bei switch/case hast du dann maximal 25 cases. Und eine if/else Kette wird auch etwas einfacher, da du nicht mehr zwei Grenzen abfragen musst.

0- 9 = 0
10-19 = 1
20 - 29 = 2
...

Serenifly:
Weil du dann nur noch 25 Werte hast die alles abdecken. Bei switch/case hast du dann maximal 25 cases. Und eine if/else Kette wird auch etwas einfacher, da du nicht mehr zwei Grenzen abfragen musst.

0- 9 = 0
10-19 = 1
20 - 29 = 2
...

Ok, danke für die Info.
Das ist also rein wegen der "Einfachheit" und nicht programmtechnisch bedingt.
Macht Sinn
:wink:

Das ist also rein wegen der "Einfachheit" und nicht programmtechnisch bedingt.

Richtig!
Das Ganze als Sprungtabelle ausgelegt, erlaubt dann auch den Verzicht auf if/switch/schleife

Kann man nicht einfach auf die Anzahl der Bereiche mappen?
z.b. bei 6 Bereichen:

y = map(x, 0,256,1,7);

Kann man nicht einfach auf die Anzahl der Bereiche mappen?
z.b. bei 6 Bereichen:

y = map(x, 0,256,1,7);

Kann man schon, map(x, 0,256, 0, 6); ist auch nur eine Division, die 0 .. 255 auf 6 Werte (0 .. 5) gleichmässig aufteilt.