La cosa migliore è utilizzare un thread che giri continuamente leggendo il device e che provveda ad eseguire le funzioni opportune a seconda della direzione rilevata.
Sicuramente abbandonerei la versione con tutti quei timer.