Hi,

in der Methode state_machine() wird die Variable is_moving bei jedem Aufruf auf false gesetzt ... Das war wohl nicht der beabsichtigte Sinn.
Die sollte nur einmal initialisiert werden und spaeter ihren Wert in Abhaengigkeit anderer Ereignisse aendern.

hth
Kay

EDIT: hint: bitte informiere Dich ueber die Bedeutung von "static" im Zusammenhang mit einer "lokalen Variable"