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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.