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
#3623966
Chris D. schrieb: > Ich will nämlich lins am arduino auslesen Was sind lins? Ist das ein spezielles Arduino Shield? Sagt dir "switch" und "case" etwas?
Meinte pins haha
Und das sagt mir etwas. Wie läuft das mit dem case und so ab? Läuft das so ähnlich wie diese else ifs dauernd bis man etwas drückt?
Gast
#3623984
Wenn man alle portpins nacheinander durchgehen will, nimmt man ein for Schleife. In der Schleife braucht man dann nur eine if Abfrage.
Gast
#3623986
switch/case wird hierbei nicht helfen, damit kann man nur eine Variable auf verschiedene Werte abfragen: int x = f();
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
Dies entspricht in etwa:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Gast
#3623997
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 | |
2 | |
3 | |
4 | |
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
#3624002
Chris D. schrieb: > 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?? Dann nimmt man Interrupts.
Gast
#3624008
Chris D. schrieb: > Wichtig is aber das kein pin ausversehen durch zu kurzen tastendruck > übersehen wird. Ich fürchte, du überschätzt deine Drückgeschwindigkeit. Wie lang ist denn dein kürzester Tastendruck?
Gast
#3624016
BattMan schrieb: > if ( a & ( 1 << i)){ /* Einzelne Pins abfragen*/ Zur weiteren Veranschaulichung:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
Gast
#3624019
BattMan schrieb: > case: 0: Tue_etwas(); /* PIN Nr. 0 ist gesetzt */ Schreibfehler von mir: Richtig ist:
1 | |
Der Doppelpunkt nach dem case war falsch!
Gast
#3624025
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.