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
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
Peter Dannegger schrieb: > Du müßtest diesen Code von C nach Bascom umschreiben: > > Beitrag "Universelle Tastenabfrage" > > > Peter Hallo Peter, funktioniert dieser Code auch für externe Tasteninterrupts? Hab ne Folientastatur an Interruptleitungen! Was müsst ich umschreiben? Besten Dank!
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.
STK500-Besitzer schrieb: > 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. Das heisst ich kann mir die Interrupts sparen und mit einem Timer Interrupt die Tasten abfragen?
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.
Michael H. schrieb: > Solange die Taste gedrückt (Abfrage mit PIN*) 100mS--> 100 milli Siemens? https://de.wikipedia.org/wiki/Internationales_Einheitensystem
Michael H. schrieb: > Nee, er muss nach ASM umschreiben. So ein Quatsch! Nein, die ASM-Version war eher als die C-Version da. Und ich nutze sie gern in verschiedenen Varianten. In Bascom habe Peters Entprellung auch mal eingesetzt, allerdings für einen etwas anderen Zweck: Beitrag "Schalter zu Taster" Beitrag "Re: Schalter zu Taster" ...
Kannst mal eine Quick and Dirty Lösung machen...So etwa... DIM Geräte_Status as Byte Geräte_Staus=0 Do Debounce Pinb.0 , 0 , Taster, SUB loop Taster: Wenn Dein Geräte_status=0 dann Gerät einschalten Status=1 Wenn Status=1 dann Warte Schalte aus Status 0
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.