Die hele structuur van dat programma rammelt eigenlijk een beetje....
Hij doet er beter aan om iets met een enumeratie van de verschillende stappen die mogelijk zijn.
bijvoorbeeld:
enum {
noAction,
forward,
back,
hold,
home
};
In de loop bepaalt hij eerst welk van die stappen hij wil aan de hand van buttons of andere acties.
Met een switch case bepaal je vervolgens wat je wilt. Echter ga je dan geen while() oid uitvoeren maar slechts een stapje verplaatsen. Blijkt dat je home bent, dan zet je de actie op noAction. anders verplaats je een stapje richting home.
Wil je voorwaards, verplaats je een stapje voorwaards... enz
Je bereikt dat je daarmee alle delays de nek om draait. Spelen met LEDS aan en uit kun je gewoon mee werken.
En een interrupt moet je zo kort mogelijk houden. Dus stel de noodknop is ingedrukt dan zet je de actie op home en klaar. Meer hoef je niet te doen.
In de loop komt de switch case de home actie tegen en verplaatst een stapje richting home. Ben je er eenmaal dat zet je de actie op noAction.
Verder kun je jezelf nog afvragen of het nog wel nodig is om de interrupt te gebruiken voor de noodknop. Het lezen van de knop zal in reactie tijd relatief geen verschil maken (omdat het menselijk lichaam nu eenmaal veeeeeel te traaaag is).
Verder is het beter om alle settings van de stepper in de setup() uit te voeren. Niet in de loop().