Interrupt handling, interrupt werkt wel maar functie loopt niet.

Los van het feit dat het programma, voor de experts, wellicht niet oogstrelend mooi is, reikt mijn kennis van de programmeertaal niet ver genoeg om iets te doen met enumeraties. Daarnaast speelt de factor tijd een rol en hoewel ik erg graag een aantal dagen of weken zou willen prutsen met deze set-up, laten andere factoren dat helaas niet toe.

Enfin, gelet op het geleverde commentaar besloten de interrupt te verwijderen en gewoon met if statements de stopknop gaan detecteren.
De gehele toepassing, een testopstelling, is aan bepaalde regels gebonden qua naderingssnelheid (10 - 25 mm/sec) en dus niet erg tijdskritisch. Het gaat er om dat als iets niet loopt in de test zoals dat zou moeten (in dit geval een brandtest), dat de slede teruggetrokken wordt.

Met het huidige programma doet het wat het moet doen. Er komt nog een displaytje (OLED op I2C) op om aan te geven wat het programma aan het doen is en om 30 seconden af te tellen (ipv de delays).

Bedankt in ieder geval voor het commentaar, die zaken die ik heb kunnen doen, zijn verwerkt!

#include <Arduino.h>
#include "BasicStepperDriver.h"

// Motor steps per revolution. Most steppers are 200 steps or 1.8 degrees/step
#define MOTOR_STEPS 200

// All the wires needed for full functionality
#define DIR 8
#define STEP 9
#define ENBL 11

// Since microstepping is set externally, make sure this matches the selected mode
// 1=full step, 2=half step etc.
#define MICROSTEPS 1

BasicStepperDriver stepper(MOTOR_STEPS, DIR, STEP, ENBL);

const int buthome = 2;     // the number of the pushbutton pin
const int buteut = 3;     //Aanslag
const int ledPin =  13;      // the number of the LED pin
const int butstart = 4;   // startknop
const int butstop = 5;    // stopknop

boolean stop1 = false;
boolean homed = false;
float naloop = 0;


void setup() {

    /*
     * Set target motor RPM.
    */
    stepper.setRPM(250);
    stepper.setMicrostep(MICROSTEPS);
// initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  // initialize the pushbuttons pins as an input:
  pinMode(buthome, INPUT);
  pinMode(buteut, INPUT);
  pinMode(butstart, INPUT);  
  pinMode(butstop, INPUT);      
    
}

void loop() {
  stepper.disable();
  digitalWrite(ledPin, LOW);
  if (digitalRead(buthome) == LOW) {
   //if (homed == false) {
    home(); 
   }
   else {
    homed = true;
    if (digitalRead(butstart) == HIGH){
    moveeut();
    holdeut();
    }
    else {
    stepper.disable();   
    }
    }
 }
//}
void home() {
     stepper.enable();
     while (digitalRead(buthome) == LOW)
      {
       stepper.rotate(-40);
       if (digitalRead(butstop) == HIGH){
       homed = false;
       break;
       } 
      else { homed = true; }
      }
     }


void moveeut(){
  stepper.enable();
    while (digitalRead(buteut) == HIGH) {
    stepper.rotate(40);
   if (digitalRead(butstop) == HIGH) {
   home(); 
   stepper.disable();
   break;     
   }
  }
  while (digitalRead(buteut) == LOW) {
   stepper.move(500*MICROSTEPS);
   if (digitalRead(butstop) == HIGH) {
   home();
   stepper.disable();
   break; 
  }
  }
}

void holdeut(){
  stepper.disable();
  naloop = 0;

  while (naloop < 140){
    naloop++;
      digitalWrite(ledPin, HIGH);
      delay(100);
      digitalWrite(ledPin, LOW);
      delay(100);
      if (digitalRead(butstop) == HIGH) {
          delay(500);
          home(); 
          stepper.disable();
          break;     
         }
  }
  stepper.enable();
  home();  
}