Also mal meine Vorgehensweise als IDEE - allerdings komme ich aus der Zeh-Welt, also keine Ahung was Basic da hergibt.

Timer Interrupt alle 2 ms - Timerfunktion:

Wenn Taster gedrückt, dann hierbei Variable hochzählen
danach auswerten:
wenn Schwellwert I erreicht (z.b 200 entsp. 100 ms Tastendrücken), Flag setzen
nach Schwellert Ia erreicht und Flag I gesetzt und kein Tastendruck mehr, dann wars ein kurzer Tastendruck - entsp. Flag setzen *)

wenn Schwellwert II erreicht (z.b. 500 entsp. 1 s tastendrücken), dann langer Tastendruck erreicht - entsp. Flag setzen *)

*)die Flags werden außerhalb der Timerfunktion ausgewertet und wieder gelöscht

Hat auch den Vorteil, daß man nebenbei die Taste entprellt ...

Wer keinen langen Tastendruck aber doppelmeldung will, muß einfach nur nach Flag Ia den Zähler zurücksetzen

Ich nutze die lange Tastenerkennung um z.B. Einstellungen zu speichern (so wie beim Autoradio) .. das spart ja/nein gefrage

Zähler muß auch gelöscht werden, wenn Schwellerte nicht erreicht werden. Hierzu zweiten Zähler verwenden ...

Hoffe die Idee kommt an ...

Die Vorgehensweise hat auch den Vorteil, daß kein Ausbremsen des uC stattfindet wie z.b. wenn man wait befehle einbaut - diese sollte man auch nie in Interruptroutinen verwenden ! Meine Meinung.

Hop it helps,
Vajk