ich hab das gerade bei einem Projekt so gemacht:

Tastenabfrag im Timer Int, der alle 10ms kommt.
Wenn Taste gedrückt, dann werden beide Variablen hochgezählt, die erste bis 4, dann wird die Taste als gedrückt erkannt und der Tastenwert
wird in eine globale Variable geschrieben. Die zweite Variable kann hoch bis 200 zählen, das sind dann 2 Sekunden, sprich die Taste lange gedrückt und es wird ebenfalls ein globales Flag gesetzt.
Wird zwischendurch keine Taste als gedrückt gelesen werden beide Zählariablen auf 0 gesetzt, Das FLag gelöscht, der Tastenwert auf 0 und die
Aufwärtszählerei beginnt beim nächsten Tastendruck von vorne.

Dann habe ich in der Mainloop nur noch die Abfrage ob ein Tastenwert >0 da ist, wenn Tastenwert gesetzt, dann erhöhe / erniedrige um 1, wenn Langzeitflag gesetzt dann eben nochmal 3 dazu oder herunter.