Wie wäre es damit?

Wenn der Taster gedrückt wird, etwa 150ms warten und schauen ob er immer noch gedrückt ist.
Wenn ja, nochmal etwa 150ms warten. Wenn er dann immer noch gedrückt ist, ist es einmal lang.
Wenn nein, war es einmal kurz.
Dann wieder abfragen.
Und auswerten, ob das zweite mal, kein Tastendruck war, ein kurzer oder langer.

Die Zeiten für kurz, 2 X kurz, lang und die Pause zwischen 2 X kurz müssen dann der Praxis angepasst werden.

Die maximale Zeit, die eine Aktion dauern darf (1 sec für lang oder 400ms für kurz + 200ms für Pause zwischen den kurzen + 400ms für zweiten kurz) muss dann ermittelt werden.
Der taster löst ein INT aus und in der ISR wird ein Timer mit der max. Zeit aktiviert.
Vor beginn der ISR wird ein Merker gesetzt. Nur wen eine Tastenaktion bei gesetzem Merker erfolgt, gehört sie zu einer Gruppe (2 X kurz) nach ablauf der Zeit wird der Merker gelöscht und es kann von vorne beginnen.

Oder

Taste gedrückt. Schauen ob nach Zeitablauf für kurz immer noch gedrückt. Wenn ja, GOSUB Taste_lang.
Wenn nein, GOSUB "_X_kurz. Dort die minimale Pausenzeit zwischen 2 mal kurz warten und nochmal schauen ob Taste gedrückt.
Wenn nein, die maximale Pausenzeit warten und nochmals schauen.
Wenn Taste erneut gedrück, denn war's 2 X kurz. Ansonsten RETURN zu einmal kurz.