Eine Hardware-Lösung würde ich gerne vermeiden. Ich habs jetzt erstma anderweitig gelöst, jetzt fährt er dauerhaft zwischen zwei Positionen hin und her, z.b. 30° und 150°. Das dürfte für meine Zwecke reichen.

Allerdings komm ich damit im Moment nicht weiter wenn ich in die Loop noch eine andere Funktion packe.

1+2 = fail

1
Code:
#include <Servo.h>
int pos = 0;
Servo myservo;
long previousMillis1 = 0;
long previousMillis2 = 300;


 
void setup(){
 myservo.attach(10);
}

 void loop(){
  unsigned long currentMillis = millis();
  if(currentMillis - previousMillis1 >= 600) {      //yes 200
    myservo.write(30);
    previousMillis1 = currentMillis;
  }
  if(currentMillis - previousMillis2 >= 600) {      //yes 200
    myservo.write(150);
    previousMillis2 = currentMillis;
  }
}
2
Code:
#define echoPin 46 // Echo Pin
#define trigPin 47 // Trigger Pin
 int maximumRange = 200; // Maximum range needed
 int minimumRange = 0; // Minimum range needed
 long interval = 50;    // Scanrate
 long previousMillis = 0;
 long duration, distance;
 
 
void setup() {
 Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}
 

void loop() {
  scan();
}
 
 
int scan(){
 unsigned long currentMillis = millis();
 if(currentMillis - previousMillis >= interval) {
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2); 

  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10); 
 
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
 
  Serial.println(distance);
  distance = duration/58.2;  //Calculate the distance (in cm) based on the speed of sound.
  previousMillis = currentMillis;
 }
}
fail
Code:
#include <Servo.h>
#define echoPin 46 // Echo Pin
#define trigPin 47 // Trigger Pin
 int maximumRange = 200; // Maximum range needed
 int minimumRange = 0; // Minimum range needed
 int pos = 0;
 long interval = 50;    // Scanrate
 long previousMillis = 0;
 long previousMillis1 = 0;
long previousMillis2 = 300;
 long duration, distance;
 Servo myservo;

 
void setup() {
 Serial.begin (9600);
 myservo.attach(10);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}
 

void loop(){
  scan();
  unsigned long currentMillis = millis();
  if(currentMillis - previousMillis1 >= 600) {      //yes 200
    myservo.write(30);
    previousMillis1 = currentMillis;
  }
  if(currentMillis - previousMillis2 >= 600) {      //yes 200
    myservo.write(150);
    previousMillis2 = currentMillis;
  }
}
 
 
int scan(){
 unsigned long currentMillis = millis();
 if(currentMillis - previousMillis >= interval) {
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2); 

  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10); 
 
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
 
  Serial.println(distance);
  distance = duration/58.2;  //Calculate the distance (in cm) based on the speed of sound.
  previousMillis = currentMillis;
 }
}
Scannen, also die Entfernung messen, macht er perfekt, allerdings fährt der Servo nur auf Position 150° und schläft ein.
Einzelnd betrachtet funktionieren die Sketche. Kommt er mit den ganzen 'currentMillis = millis();' nicht klar und verzählt sich oder kommt aus dem takt?