Forum: Mikrocontroller und Digitale Elektronik Arduino Programm mit t-flipflop Funktion.


von Jan R. (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Flip Flop (Gast)


Lesenswert?

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.

von fritz (Gast)


Lesenswert?

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!

von Karl H. (kbuchegg)


Lesenswert?

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.

von Flip Flop (Gast)


Lesenswert?

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

von Jan R. (Gast)


Lesenswert?

1
if (taster = HIGH) AND (Vorhher = 0)

geht sowas ?? in Arduino..

von Markus M. (mark_m)


Lesenswert?

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
}

von Markus M. (mark_m)


Lesenswert?

Uuups, kleiner Fehler.
1
if ( (Taster == HIGH) && (Vorher == 0) )

Grüsse

von Jan R. (Gast)


Lesenswert?

Markus M. schrieb:
> Uuups, kleiner Fehler.
>
>
1
> if ( (Taster == HIGH) && (Vorher == 0) )
2
>
>
> Grüsse


dieser befehl kann der arduino odaer was??

von Markus M. (mark_m)


Lesenswert?

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
Noch kein Account? Hier anmelden.