Zweiter Interrupt für einen Servo

Hallo zusammen,

untenstehender Code übergibt den Array {1000,0} an die Regelung meines DC-Encoder-Motors. Der Motor fährt dann zuerst die Position 1000 an, wartet dann 5 Sekunden und fährt anschließend auf 0 zurück. Je nach Drehrichtung des Motors leuchtet dann eine Diode. Wenn der Motor pausiert, leuchtet die Diode von PIN 11 und die PIN 5 wird auf HIGH gesetzt. Nun will ich es ausnutzen, dass der PIN5 auf HIGH gesetzt wurde, um einen Interrupt einzuführen, um einem Servo einen Winkel vorzugeben. Leider wird der Interrupt nicht aktiv und beim Servo tut sich nichts.

Hat vlt. jemand eine Idee, woran das liegen kann? Bzw., ist es überhaupt möglich, 2 Interrupts zu verwenden?

Viele Grüße

#include <PIDController.h>
volatile long int encoder_pos = 0;
PIDController pos_pid; 
int motor_value = 255;
unsigned int integerValue[]={1000,0};  // Max value is 65535
unsigned long start;
char incomingByte;

#include <Servo.h>
Servo myServo;

void setup() {
myServo.attach(6);
Serial.begin(9600);
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
attachInterrupt(digitalPinToInterrupt(2), encoder, RISING);
attachInterrupt(digitalPinToInterrupt(5), servo, HIGH);

pos_pid.begin();    
pos_pid.tune(15, 0, 2000);    
pos_pid.limit(-255, 255);
}

void loop() {
start=millis();
      
for (int i = 0; i <= 1; i++) {
   do{
   pos_pid.setpoint(integerValue[i]);
   motor_value = pos_pid.compute(encoder_pos); //+255 oder -255
     if(motor_value > 0){
     MotorCounterClockwise(motor_value);
       }else{
        MotorClockwise(abs(motor_value));
        }
  
  Serial.println(motor_value);
  delay(10);
       
     if (motor_value > 50 || motor_value < -50 ) {
     digitalWrite(11, LOW);
      }else{
       digitalWrite(11, HIGH);
       digitalWrite(5,HIGH);
       }  
     }while(millis()-start<5000);
      start=millis();
   }
}


void encoder(){

  if(digitalRead(3) == HIGH){
    encoder_pos++;
  }else{
    encoder_pos--;
  }
}

void servo(){

  if(digitalRead(11) == HIGH){
    myServo.write(20);
    delay(1000);
    myServo.write(120);
    digitalWrite(5,LOW);
   }
}

void MotorClockwise(int power){
  if(power > 100){
  analogWrite(9, power);
  digitalWrite(10, LOW);
  digitalWrite(13, HIGH);
  }else{
    digitalWrite(9, LOW);
    digitalWrite(10, LOW);
    digitalWrite(13, LOW);
  }
}

void MotorCounterClockwise(int power){
  if(power > 100){
  analogWrite(10, power);
  digitalWrite(9, LOW);
  digitalWrite(12, HIGH);
  }else{
    digitalWrite(9, LOW);
    digitalWrite(10, LOW);
    digitalWrite(12, LOW);
  }
}

Was ich spontan sehe: delay() in einer ISR funktioniert nicht.

Sicher, dass dein Pin5 einen Hardware Interrupt auslosen kann?
https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/
Ich bin mir da nicht sicher.