Tasten auswerten!

Gast #493073
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!
Gast #493074
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
Gast #493094
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.
#493185
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
}

  

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