void setup() { pinMode(7, OUTPUT); //Pin an dem der Servo angeschlossen ist } void loop() { for (byte i = 0; i < 180; i += 10) { //Bei dieser Drehung reagiert der Servo, Micro servo 9g SG90, nur ab und zu //Mit 350ms funzt er digitalWrite(7, HIGH); pause_servo(i); //Delay in Abhängigkeit des gewählten Winkels digitalWrite(7, LOW); delay_millis(500); //500ms delay, NICHT mit delay(), geht aber mit delay() auch nicht! } //Bei dieser Drehung reagiert der Servo wie erwartet //Mit 500ms funzt er nur ab und zu for (byte i = 180; i > 10; i -= 10) { digitalWrite(7, HIGH); pause_servo(i); //Delay in Abhängigkeit des gewählten Winkels digitalWrite(7, LOW); delay_millis(350); //350ms delay, FUNZT aber auch mit delay() } } void pause_servo(unsigned long degree) { unsigned long new_time; new_time = micros(); while ((new_time + (degree * 12) + 500) > micros()); //Die Formel ist nicht genau!!! Aber hinreichend! } void delay_millis (unsigned long time) { unsigned long new_time; new_time = millis(); while ((new_time + time) > millis()); }