Interrupt handling, interrupt werkt wel maar functie loopt niet.

Hoi Leroy 2007.

Je hebt een quote gebruikt om je code te plaatsen.
Het kost net zoveel moeite om de code tussen [code] [/code]tags te zetten, als tussen [quote] [/quote] tags.
Het voordeel van code tags is dat daarmee de tekst niet word omgezet naar smilies (dat was bij jouw code niet van toepassing) of andere ongewenste bewerkingen, maar ook dat de tekst zo heel eenvoudig geselecteerd en gekopieerd kan worden naar bijvoorbeeld de IDE.

Jouw eigen bevindingen zijn hier belangrijk.
Want je vertelde dat de home functie werkt, en dat de interrupt ook werkt.
Daarmee moet er dus wat dat betreft niks aan de hand zijn.
Ik zie wel iets wat mijn rechter wenkbrauw doet rijzen:

Je hebt je interrupt gemaakt en daarmee roep je de functie back op als je op pin 2 een rising edge ziet.
Maar in je code zit je ook naar pin 2 te kijken (of die al hoog is, das dus na de rising edge).
Daarmee denk ik dat je 2 keer hetzelfde zit te doen (want als die pin 2 hoog is ga je ook weer naar de functie home).

Een interrupt doet precies dat wat de naam suggereert:
Het onderbreekt het lopende programma, maar stopt het niet.
Dat wil zeggen dat de handeling die er op dat moment gedaan word, verder gaat na aflopen van de interrupt.
Als deze code alles is wat er moet gebeuren, dan is het maar de vraag of het wel zo verstandig is om een interrupt te gebruiken.
Want de afhandeling van die code hoeft helemaal niet lang te duren.
Je laat je motor een x aantal stappen doen (ik zie een keer de waarde 500 voor x voorbij komen).
Dat betekent dat je in dat geval dus moet wachten tot de 500 stappen gezet zijn.
Je kunt ook 500 keer een stap zetten.
Het voordeel daarvan is dat je dus telkens tussendoor naar pin 2 kunt kijken.
Als je op pin 2 ziet waar je op zat te wachten, dan kun je de stappenmotor aansturing laten stoppen door het aftellen van x kort te sluiten; je vertelt je code dat de 500 stappen al gezet zijn.
Wanneer je code veel groter is dan wat je hier hebt laten zien, of veel groter moet gaan worden, dan moet je even goed nadenken of je het op de door mij hierboven beschreven wijze wil doen.

In ieder geval ga je met je huidige code 2 keer hetzelfde doen, en ik weet even niet of je misschien de stappenmotor dan meerdere commando's door elkaar zit te geven.
Ik zou deze redundantie in elk geval uit de code halen; de interrupt overruled vrijwel alles en er is dan gaan andere controle op de status van pin 2 meer nodig (in dit geval, want er kunnen wel meer trucs worden uitgehaald).

Je hebt ook nog een stukje ontdender (debounce) in je code zitten, met incorrect commentaar overigens.
Kijk daar nog eens goed naar.
Want je reset die als tweede actie als je een interrupt gaat afhandelen.
En dat doe je zelfs 2 keer, omdat je 'm na starten van de functie aanmaakt waarbij je m dan ook nog eens naar nul zet.
Maar die moet je pas resetten als de interrupt is afgehandeld, anders wordt nooit aan de voorwaarde voldaan bij een interrupt (wel als je op een andere wijze deze functie aanroept, wat je nu ook doet.
Overigens is 0,2 seconden (200 mS), een zee van tijd.
Het is een beetje een vreemde combinatie als je 200 mS wachttijd koppelt aan een interrupt.

Een heel verhaal alweer van iemand die zelf nog nooit met interrupts heeft gewerkt en die ook nog nooit iets in de richting van jouw code heeft gebouwd.
Maar bekijk de opmerkingen eens en doe er je voordeel mee.