5 Sekunden ist vielleicht zu lang gewählt? Ich könnte mir vorstellen, dass das eine Byte-Variable ist. Also wäre 255 das Maximum.

Debounce einfach manuell:
Falls das Programm gleichzeitig eh nix machen soll, Frage den Wert ab, warte 5 Sekunden und frage nochmal ab. Wenn Wert A und B gleich sind, dann gilt die Taste als gedrückt.

Eleganter ist bestimmt, einen Timer mit Interrupt zu verwenden... der fragt den Taster ab und springt alle X Millisekunden in eine Sub, die den Taster erneut abfragt und bei positivem Ergebnis einen Zähler erhöht, dann nach 5 Sekunden das Ereignis auslöst.

Außerdem würde ich die Variable DIRECTION einfach als Bit dimensionieren und mit TOGGLE umschalten - spart CPU-Power und Codespace.