elegantere Lösung zu else if.

#3623962
Lesenswert?

Moin
Gibt es eine elegantere Lösung um Anweisungen wie if und elwe if 
auszuführen. Ich will nämlich lins am arduino auslesen und falls eine 
Spannung anliegt soll das was in der if Anweisung steht ausgeführt 
werden. Das hab ich so so gemacht.

While (diesdas > 1)
If(digitalRead(pin1 == HIGH)){
//tu etwas
}
Else if(digitalRead (pin2 == HIGH)){
//tu etwas anderes
}

Und so geht das bei mir mit 20 anderen pins weiter. Es sollen so lange 
diese pins anlusgelesen werden bis die Bedingung in der while schleife 
nicht mehr stimmt.
Gibt es dafür elegantere Lösungen oder kann es hierbei zu komplikationen 
kommen?
Gast #3623986
Lesenswert?

switch/case wird hierbei nicht helfen, damit kann man nur eine Variable 
auf verschiedene Werte abfragen:

int x = f();
1
switch(x)
2
{
3
  case 1:
4
    do_something();
5
    break;
6

7
  case 2:
8
    do_something_else();
9
    break;
10

11
  default:
12
    do_nothing();
13
}

Dies entspricht in etwa:
1
if(x == 1)
2
  do_something();
3
else if(x == 2)
4
  do_something_else();
5
else
6
  do_nothing();
Gast #3623997
Lesenswert?

Warum liest Du nicht erst einmal die Ports komplett ein und prüfst 
danach
welche Pins gesetzt sind oder nicht.
Das funktioniert allerdings nur dann, wenn die Ports komplett für Deine 
Anwendung reserviert sind.

Bspw. so:
1
if ( a=PINx ) { /* Prüft ob irgend ein Pin gesetzt ist, also NICHT 0 ist*/
2
 
3
            for(i=0; i < 8; i++ ){
4
                if ( a & ( 1 << i)){ /* Einzelne Pins abfragen*/
#3623999
Lesenswert?

Port schrieb:
Wenn man alle portpins nacheinander durchgehen will, nimmt man ein for 
Schleife. In der Schleife braucht man dann nur eine if Abfrage.

Wichtig is aber das kein pin ausversehen durch zu kurzen tastendruck 
übersehen wird. Wie würde diese for schleife dann aussehen??
Und wie kommt man in die auszuführenden befehle??
Gast #3624025
Lesenswert?

Warum willst du überhaupt eine andere Lösung?

Ein Programm soll funktionieren und es soll einfach und verständlich 
sein. Damit man bei einem Fehler sofort sieht, was man ändern muss.

So gesehen ist das Programm ideal.

Natürlich kann sich heraus stellen, das es nicht so einfach geht, dass 
du z.B. einen Tastenentprellung in einer Interruptroutine brauchst.

Aber warum anders machen, wenn es funktioniert?

P.S. Beispiele für elegante Lösungen findest du recht einfach. Suche 
nach umfangreichen Open-Source-Projekten, an denen nur 1 oder 2 Leute 
arbeiten.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren