Arduino Programm mit t-flipflop Funktion.

#3206691
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.
Gast #3206696
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.
Gast #3206702
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!
#3222136
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
}
#3222374
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

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