Übrigens:
Man muss nicht warten, bis der Taster losgelassen wurde.

Man geht einfach folgendermaßen vor.
Bei Tastendruck startet man einen Timer mit Interrupt bei Überlauf/Ablauf.
Der Timer wird auf einen Wert gesetzt, dass er überläuft, wenn der Taster eine Mindestzeit gehalten wird.

Kommt der Interrupt, ist es ganz automatisch schon Fall 2 (Taster lang gedrückt halten), egal ob er bereits losgelassen wurde.
Kommt das Loslassen des Tasters vor dem Interrupt, wird der Timer abgeschaltet und es ist Fall 1 (Taster kurz drücken).
Auf diese Weise kann man das Programm oder deren Funktionen nicht länger als nötig blockieren.