Hi. Wollt mit dem arduino ein Programm schreiben mit der Funktion t flipflop also einmal aufn Taster drücken an nochmal aus. Wie macht man das. Komme nicht darauf. Mit if Abfrage geht's nicht mit Schleife auch net. Bräuche dringend einen Tipp danke schonmal.
Jan R. schrieb: > Bräuche dringend einen Tipp danke schonmal. INdem du einen "vorher nachher Vergleich" durchführst. Schaust du aus dem Fenster zum Badezimmer der Nachbarin und siehst du, dass das Fenster dunkel ist, dann merkst du dir das 'dunkel'. Schaust du 2 Sekunden später wieder hin und bemerkst: das Fenster ist dunkel, dann sagt dir das: es war vorher dunkel und ist jetzt dunkel - da hat sich nichts getan. Schaust du aber wieder 2 Sekunden später hin dann stellst du zb fest: das Fenster ist hell! Aus der Tatsache das das Fenster vor 2 Sekunden noch dunkel war und jetzt hell erleuchtet ist, schliesst du in Sherlock Holmes Manier messerscharf: während dieser 2 Sekunden hat wer das Licht aufgedreht. Es kann nicht vorher gewesen sein, dann vorher war das Fenster die ganze Zeit dunkel. Und 2 Sekunden später, beim nächsten hinschauen, ist das Fenster immer noch erleuchtet, d.h. der Zustand hat sich nicht verändert. Nein, genau in diesen 2 Sekunden, in denen sich der Zustand von dunkel auf hell geändert hat, genau in diesem Zeitraum muss wer das LIcht aufgedreht haben. Eine andere Möglichkeit gibt es nicht. Pseudocode
1 | now = Tastenzustand feststellen |
2 | |
3 | if( now != previous ) |
4 | { |
5 | // AHA! da hat sich was verändert! |
6 | if( now == Taste gedrückt ) |
7 | { |
8 | // jawohl doch. Die Taste wurde niedergedrückt |
9 | |
10 | mach irgendwas mit der INformation, dass die Taste niedergedrückt |
11 | wurde |
12 | } |
13 | |
14 | previous = now |
15 | } |
Wenn deine Taster (momentan) noch nicht allzusehr prellen, dann reicht das schon, wenn nicht dann mach eine kleine Wartezeit nach Erkennen des Tastendrucks rein, damit in dieser Zeit der Preller abklingen kann.
Wieso geht das mit if nicht? if (Taster wurde gedrückt) { if ( status == 0 ) status =1; else status = 0; } Und schon ändert sich das status bei jedem betätigen des Tasters. Das Beispiel hat keinen Anspruch auf Vollständigkeit.
Z.B Taster EingBit Abfragen auf Low 'drücken 10 ms warten Taster EingBit Abfragen auf High 'loslassen 5 ms warten Mit Xor z.B ein Ausgabebit negieren. gibt hier bestimmt noch einen Bitbefehl. Habe aber keinen Arduino!
Flip Flop schrieb: > Wieso geht das mit if nicht? > > if (Taster wurde gedrückt) Genau hier liegt der springende Punkt. Das feststellen das ein Taster gedrückt WURDE im Gegensatz zu "ein Taster IST gedrückt" Das sind 2 verschiedene Dinge und stellen eine erste Hürde für Neulinge dar.
Das habe ich extra so formuliert, da hier im Idealfall eine Funktion aufgerufen wir, die ein Abfrage auf Tastentdruck behandelt. Arduino hat dafür eine Library: http://playground.arduino.cc//Code/Bounce
1 | if (taster = HIGH) AND (Vorhher = 0) |
geht sowas ?? in Arduino..
Nein, das geht nicht mit dem Arduino! Du musst dich schon an den C++ Standard halten.
1 | if ( (Taster == 0) && (Vorher == 0) ) |
Du musst jetzt nur noch den Zustand des Taster mit einer Funktion ermitteln, die ein Prellen des Taster berücksichtigt. Das Arduino Environment stellt dafür eine Library bereit: "Bounce" siehe vorheriger Post.
1 | // This code turns a led on/off through a debounced switch
|
2 | |
3 | #include <Bounce.h> |
4 | |
5 | // This code turns a led on/off through a debounced button
|
6 | // Build the circuit indicated here: http://arduino.cc/en/Tutorial/Button
|
7 | |
8 | #define BUTTON 2
|
9 | #define LED 13
|
10 | |
11 | // Instantiate a Bounce object with a 5 millisecond debounce time
|
12 | Bounce bouncer = Bounce( BUTTON,5 ); |
13 | |
14 | void setup() { |
15 | pinMode(BUTTON,INPUT); |
16 | pinMode(LED,OUTPUT); |
17 | }
|
18 | |
19 | void loop() { |
20 | // Update the debouncer
|
21 | bouncer.update ( ); |
22 | |
23 | // Get the update value and turn on or off the LED
|
24 | digitalWrite(LED, bouncer.read()); |
25 | |
26 | }
|
Uuups, kleiner Fehler.
1 | if ( (Taster == HIGH) && (Vorher == 0) ) |
Grüsse
Markus M. schrieb: > Uuups, kleiner Fehler. > >
1 | > if ( (Taster == HIGH) && (Vorher == 0) ) |
2 | >
|
> > Grüsse dieser befehl kann der arduino odaer was??
Irgendwie komm ich veräppelt vor! Oben stehen alle Informationen, die du benötigst! Soll ich es dir noch vorkauen? Na gut, aber nur ein mal.
1 | // This code turns a led on/off through a debounced switch
|
2 | |
3 | #include <Bounce.h> |
4 | |
5 | // This code turns a led on/off through a debounced button
|
6 | // Build the circuit indicated here: http://arduino.cc/en/Tutorial/Button
|
7 | |
8 | #define BUTTON 2
|
9 | #define LED 13
|
10 | |
11 | // Instantiate a Bounce object with a 5 millisecond debounce time
|
12 | Bounce bouncer = Bounce( BUTTON,5 ); |
13 | |
14 | int Vorher = 0; |
15 | |
16 | void setup() { |
17 | pinMode(BUTTON,INPUT); |
18 | pinMode(LED,OUTPUT); |
19 | }
|
20 | |
21 | void loop() |
22 | {
|
23 | // Update the debouncer
|
24 | bouncer.update ( ); |
25 | |
26 | if ( bouncer.read() && (Vorher == 0) ) |
27 | {
|
28 | Vorher = 1; |
29 | // Hier musst Du dein Code einfügen, der z.B. einen Pin auf HIGH setzt
|
30 | digitalWrite(LED, HIGH); |
31 | }
|
32 | else
|
33 | {
|
34 | Vorher = 0; |
35 | // Hier musst Du dein Code einfügen, der z.B. einen Pin auf LOW setzt
|
36 | digitalWrite(LED, LOW); |
37 | }
|
38 | }
|
Grüsse
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.