Arduino Digital-Servo

In meinem Beitrag beziehe ich mich auf den Sketch in diesem post:

Habe den dortigen Sketch genommen und so verändert, dass wenn ich im SerialMonitor eine Zahl eingebe, der Servo sich dann in diese Stellung bewegt! Funktioniert alles soweit, außer dass wenn ich die zahl absende fährt der Servo zuerst ein Stück zurück und dann in die angegebene Stellung! ich möchte aber dass er von der aktuellen position gleich in die neue stellung fährt!
Hier einmal mein code, vielleicht kann mir jemand bitte sagen, wo der fehler liegt.

int winkel;
int pos;
void setup() {
  Serial.begin(9600);
  pinMode(2,OUTPUT);
}

void loop() {
  if(Serial.available()>0){
 winkel = Serial.parseInt();
   if (winkel != pos){
      for(int l=0;l!=winkel;l++)
             
      
    pulsen(l);
    
        delay(5);
      }
    
    }
}
  
 

void pulsen(int i)
{int m=map(i,0,180,500,2500);
 digitalWrite(2,HIGH);
 delayMicroseconds(m);
 digitalWrite(2,LOW);
delayMicroseconds(3000-m);
pos = winkel;

}

Hallo,

das Servo muss springen. Die Schleife fängt immer bei 0 an!

for(int l=0; l!=winkel; l++)

Du musst das schon Richtungs- und Positionsabhängig programmieren.
ungleich Abfrage macht man eigentlich auch nicht. größer, kleiner, größer gleich, kleiner gleich sind besser.

Der Bereich 500-2500µs ist mir auch zu weit.

Der Servo springt immer zuerst in eine gewisse Endposition weil Du das so programmiert hast.

for(int l=0;l!=winkel;l++)

Du mußt als Startpunkt den ist-Wert "pos" nehmen und nicht "0".

Außerdem mußt Du die Drehrichtung kontrollieren weil wenn "winkel" kleiner als "pos" ist die Schritte negativ sein müssen (die Variable "l" vermindern )

Grüße Uwe

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.