Versuch mal nicht von 0 - 180 zu verfahren. Ich glaube das dein Servo eine Pause einlegt liegt daran, das dein Servo nicht bis 0 bzw. 180 fahren kann. Versuchs mal von 20 - 160. Wird die Pause kleiner bzw verschwindet liegt es da dran. So war es bei mir.
Das mit deiner millis() und ner For schleife funktioniert so nicht. Weil er zwar im passenden Interval zu for schleife kommt diese dann aber mit fullspeed abarbeitet.
Ich habe das ganze jetzt so gelöst:
In der ISR wird n hochgezählt mit "n++;".Code:long interval = 600; void loop() { if(n > interval){ digitalWrite(led_w, !digitalRead(led_w)); if(servo_state == 0) { servo_1_pos = servo_1_pos + 1; n=0; if(servo_1_pos ==185) { servo_state = 1; } } if(servo_state == 1) { servo_1_pos = servo_1_pos - 1; n=0; if(servo_1_pos ==75) { servo_state = 0; } } } }
Das Problem ist allerdings, das es scheint als würde das Servo irgendwann durcheinander kommen. Dann macht es einen Sprung. Je größer der Interval desto länger läuft es bis es springt. Ich vermute irgendwann passt das Timing für die PWM nicht mehr läuft über und das Servo weiss dann kurz nicht was es machen soll.
Lesezeichen