BASCOM Tastendrucklänge auswerten

Gast #1136465
Lesenswert?

Hallo!

Ich möchte gerne mit einer Taste ein Gerät schalten. Fogende Situationen 
sollten berücksichtigt werden:

Gerät AUS und Taste wird kurz gedrückt => Gerät EIN
Gerät AUS und Taste wird lang gedrückt => Gerät EIN
Gerät EIN und Taste wird kurz gedrückt => Gerät EIN bzw. nichts
Gerät EIN und Taste wird lang gerdückt => Gerät AUS

Taste kurz gedrückt: <2 Sekunden
Taste lang gedrückt: >= 2 Sekunden

Ich habe es schon mit Timer und Pulsein versucht, aber das Problem ist 
das erst geschalten wird, wenn ich die Taste loslasse (beim Drücken 
länger als 2 Sekunden). Ich möchte aber das sofort nach Ablauf der 2 
Sekunden das Gerät ausgeschalten wird und nicht erst nachdem die Taste 
losgelassen wird.

Vielleicht hat jemand ein Beispiel für mich.

Danke schonmal.

Max
Gast #1136905
Lesenswert?

Probier mal die Funktion "Debounce" in BASCOM.
Da kannst Du z.B. bestimmen, welche Schaltflanke des Tasters ausgewertet 
wird und auch die Zeit vorgeben, nach der was passiert d.h. eine SUB 
aufgerufen wird...
Gruß
Beginy
Gast #3249077
Lesenswert?

Rico H. schrieb:
> funktioniert dieser Code auch für externe Tasteninterrupts? Hab ne
> Folientastatur an Interruptleitungen!

Tasten fragt man in regelmäßigen Abständen ab. Dafür braucht man keine 
Interruptleitungen. Der einzige Grund, einen Interrupteingang zu 
verwenden, ist, den Controller zu wecken.
#3249110
Lesenswert?

Peter Dannegger schrieb:
> Du müßtest diesen Code von C nach Bascom umschreiben:

Nee, er muss nach ASM umschreiben. So ein Quatsch!

Das funktioniert mit BASCOM auch. Mit PIN* fragt man den Eingangspin ab 
(siehe Sample PORT.BAS) ist die Taste gedrückt, dass wird ein Timer 
(siehe Sample TIMER#.BAS) gestartet, ist die Taste nicht gedrückt wird 
der Timer rückgesetzt.
Nach der Laufzeit von 2 Sekunden wird reagiert.
Eine andere Lösung ist das der Timer so konfiguriert ist, das er immer 
mit einem festen zeitlichen Abstand (z.B. 100mS) eine ISR anspringt. 
Solange die Taste gedrückt (Abfrage mit PIN*) ist wird in der ISR eine 
Variable hochgezählt. Wenn die dann den geforderten Wert erreicht hat 
führt man die Aktion aus.

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