Arduino Programm mit t-flipflop Funktion.

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
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
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!
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
}
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

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.