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!
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
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.
> 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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.