Wie wär´s etwa so:
Der Taster geht auf einen Interrupt-Eingang (PinX.Y), den Du auf "Change" konfiguriertst (Auslösen bei jedem H-L oder L-H - Wechsel).
In der ISR wird geprüft, ob der Taster gerade gedrückt oder losgelassen wurde.
Wurde er gedrückt startet der Timer, wurde er losgelassen wird der Timer angehalten und auf einen bestimmten Ausgangswert gesetzt (...):
ISR:
If PinX.Y = 1 then
start timerX
Else
stop timerX
timerX = ...
End if
Return
Den Timer-Vorwert ... musst Du nur noch so berechnen, dass der Timer nach 3 Sekunden überläuft. In der Timer-ISR kannst Du dann die Aktion auslösen lassen.
Lesezeichen