Forum: Mikrocontroller und Digitale Elektronik Tasten auswerten!


von Marcel (Gast)


Lesenswert?

Hallo zusammen ich glaube ich sehe im Augenblick den Wald vor lauter 
Bäumen nicht! Ich möchte möchte eine doppelt belegte Taste auswerten. 
D.h. die Taste hat die Funktion start/stop. Den Zustand des Tasters 
bekomme ich entprellt zur Verfügung gestellt von einer fertigen Routine. 
Wie kann ich jetzt am besten erkennen ob es sich nun um die start 
Funktion bzw. die stop Funktion handelt? Mir ist schon klar das ich da 
irgendwie ein Flag setzen muss aber an der Ausführung scheitert es bei 
mir. P.S. ich versuche mich gerade in C!

von Frank (Gast)


Lesenswert?

na einfach jedesmal wenn du die Routine durchläufst irgendwas 
irgendwohin schreiben. Ob du da nur ein Bit setzt oder in eine 
Char-Variable "Start" oder "Stop" reinschreibst bleibt dir überlassen, 
musst es dann nur entsprechend abfragen.

bye

Frank

von Rahul, der Trollige (Gast)


Lesenswert?

Du musst auch noch herausfinden, ob die Taste inzwischen losgelassen 
wurde...

von Arno Nühm (Gast)


Lesenswert?

Hallo,
im Bereich der SPS wird häufig die ELTAKO-Funktion genutzt:

U  Eingang
FP Flankenmerker
X  Ausgang
=  Ausgang

Du fragst den Eingang ab, checkst auf positive Flanke (bei SPSen ist der 
vorherige Zustand des Eingangs automatisch gespeichert) und verknüpfst 
die Flanke über ein Exklusiv-Oder mit dem Ausgang. So gibt es bei jedem 
Tastendruck einen Wechsel.

von Karl H. (kbuchegg)


Lesenswert?

> Den Zustand des Tasters bekomme ich entprellt zur Verfügung
> gestellt von einer fertigen Routine

Bekommst du den aktuellen Zustand (gedrückt/nicht gedrückt),
oder bekommst du bereits die fertige Schaltflanke?


von Marcel (Gast)


Lesenswert?

Ich bekomme den Zustand, gedrückt oder halt nicht gedrückt!

von Karl H. (kbuchegg)


Lesenswert?

OK. dann musst du daraus mal als erstes den Zeitpunkt
des Umschaltens extrahieren. Der Rest ist dann einfach
nur Vergleichen des Tastenzustands mit dem Zustand
unmittelbar vorher bzw. auswerten ob gedrückt
oder nicht gedrückt, bzw. was das jetzt ist: Start oder Stop

1
#define START 0
2
#define STOP  1
3
4
unsigned char Pressed = 0;
5
unsigned char Modus = START;
6
7
....
8
9
int main()
10
{
11
  unsigned char KeyState;
12
  ....
13
14
  while( 1 ) {
15
16
    // Annahme: get_key_pressed liefert TRUE wenn die
17
    // Taste momentan gedrückt ist.
18
19
    KeyState = get_key_pressed( ... );
20
21
    // Hat sich was verändert?
22
    if( KeyState != Pressed ) {
23
      Pressed = KeyState;
24
25
      //
26
      // Ist die Taste jetzt gedrückt?
27
      //
28
      if( KeyState ) {
29
30
        // Kann es ein Start sein ?
31
        if( Modus == START ) {
32
          // mach was immer bei Start zu tun ist
33
34
          // wenn die Taste das nächste mal gedrückt wird
35
          // dann kann das nur ein Stop sein
36
          Modus = STOP;
37
        }
38
39
        // war kein Start, kann zwar nur ein Stop sein
40
        // aber sicher ist sicher
41
        else if(  Modus == STOP ) {
42
          // mach was auch immer bei Stop notwendig ist
43
44
          // Wenn die Taste das nächste mal gedrückt wird
45
          // dann kann das nur ein Start sein
46
          Modus = START;     
47
        }
48
      }
49
    }
50
  }
51
}

  

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.