PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie kann ich in eine If einen Bereich auswerten?



Henry
29.05.2007, 16:19
Hallo,

ich stehe vor dem Problem das ich einen Bereich vom Empfängerimpuls auswerten und nun bestimmte Hebelstellungen abfragen muss.

Da ja der Impuls von einem RC Empfänger immer etwas schwanken kann möchte ich für jede Stellung einen kleinen Bereich, in dem sich die ausgewertete Impulszeit bewegen darf, festlegen.

Da aber in beide Steuerrichtungen ausgewertet werden soll kann ich folgende Möglichkeit nicht nutzen:


if ((impuls < 1550) | (impuls > 1490))
{
memory = 1;
}
else
{
memory = 0;
}


Wie kann ich nun meine If Schleife dazu bewegen nur auf den Bereich zwischen 1490 und 1550 zu reagieren?
Denn wie sich (im nachhinein logischerweise) herausgestellt hat darf diese Schleife nicht auf Werte reagieren die über 1550 und unter 1490 liegen reagieren.
Gibt es da eine Möglichkeit?

Danke schon einmal

uwegw
29.05.2007, 16:29
Logik ist alles...
Du willst erkennen, wenn der Wert zwischen1490 und 1550 liegt. Das ist gleichbedeutend damit, dass der Wert größer als 1490 UND kleiner als 1550 ist. Das jetzt in Code zu übersetzen, sei deine Sache.

PS: wer hat dir beigebracht, es gäbe "if-Schleifen"? DIE GIBT ES NICHT!

geronet
29.05.2007, 17:01
Dann aber bitte ein logisches UND ( || ) und kein binäres ( | ).

Grüsse, Stefan

uwegw
29.05.2007, 17:10
@geronet: ich glaube, du verwechselst da was:
logisches UND ist &&
logisches ODER ist ||

Henry
29.05.2007, 18:16
PS: wer hat dir beigebracht, es gäbe "if-Schleifen"? DIE GIBT ES NICHT!

Keiner, das verdrehe ich immer ;)
Das waren dann Abfragen? oder liege ich wieder Falsch?

Leider sind beim probieren noch weitere Probleme aufgetaucht.

Weii ich meine Variable "memory" auf 1 setze und dann auf memory = 1 abfrage klappt es nicht. erst wenn ich auf memory > 0 abfrage (zum Testen i.O. aber auf Dauer) dann hat es funktioniert.

Das verstehe ich nicht gant memory ist als char declariert (hat aber auch mit int nicht geklappt. worann kann das denn wieder liegen?

Danke für die Hilfe, das anfängliche Problem ist mit der Antwort schon einmal (einleuchtent) gelöst

Felix G
29.05.2007, 18:37
das einfache = ist in C eine Zuweisung (egal wo es steht)...
mit memory = 1 setzt du die Variable memory also auf 1.

wenn du vergleichen willst, musst du == verwenden

Henry
29.05.2007, 18:56
Ach so,

ich brauch wohl noch ne Weile um mich mit C anzufreunden ;)

Aber durch die Zuweisung steht auch z.B. eine 6 drin wenn ich sie zuweise und dann mitt == auf 6 vergleiche, oder?

Danke

Felix G
29.05.2007, 21:44
Äh, was genau meinst du?

Wenn du einer Variable mit = einen beliebigen Wert zuweist, dann hat sie danach natürlich diesen Wert.

Und mit == kannst du prüfen ob irgendeine Variable irgendeinen bestimmten wert hat, das hat aber keinerlei Auswirkungen auf die Variable selbst.
(der Ausdruck tmp == 6 wird "true" wenn tmp den Wert 6 hat, ansonsten ergibt dieser Ausdruck "false")

Henry
29.05.2007, 21:48
Genau so meine ich das.
Danke Dir noch einmal

izaseba
29.05.2007, 23:05
Hallo, etwas offtopic, aber da fällt mir mal was ein

Es ist sinnvoll sich so Sachen wie den Schwellwert und die Hysterese am Anfang des Programms zu definieren, das erleichert einem das Leben, wenn man später was ändern will, also z.B. anstatt von


if ((impuls > 1490) && (impuls < 1510))

definiert man sich zum Anfang die Werte und arbeitet weiter mit den Konstanten


#define SCHWELLE 1500
#define HYSTERESE 10
...
...
if ((impuls > SCHWELLE-HYSTERESE) && (impuls < SCHWELLE+HYSTERESE))

Zugegeben, etwas mehr Text, aber Wenn Du die Werte mal ändern willst, brauchst Du das nur am Anfang bei define tun und brauchst nicht in Deinem Programm rumsuchen.

Gruß Sebastian

Henry
29.05.2007, 23:14
Hallo Sebastian,

das ist eine gute Idee, denn ich befürchte das ich diese Werte je nach Fernsteuerung anpassen muss. Es werden bis zu 10 Schaltkanäle anzupassen sein.
Und wenn ich ggf. das Projekt an bekannte weitergeben möchte, dann sollte es so einfach wie möglich anzupassen sein.
Ich möchte später noch eine Möglichkeit schaffen die Werte im EEProm über einen Programmiertaster (oder ähnlich) ohne neuprogrammierung abzulegen, dann kann das jeder selber machen.
Aber so weit bin ich noch nicht, wird bestimmt noch die eine oder andere Frage dazu von mir geben ;)

geronet
30.05.2007, 16:53
@geronet: ich glaube, du verwechselst da was:
logisches UND ist &&
logisches ODER ist ||

Stimmt.. logisch ;)

War so im Halbschlaf.