goto... an dieser Stelle sinnvoll?

Darf ich hier das umstrittene goto… verwenden? :slight_smile:

oder gibt es bessere Alternativen. In diesem Fall soll aus dem Setup die Funktion Servo_test() aufgerufen werden und alle 3 Servos auf die selbe Art testen. (In beideEndpositionen fahren)
Die Servo Pins sind 9,10,11 daher nur “i +=1;”.

void Servo_test() //(FC3)
{
    Serial.print(F("Servos werden geprueft..."));
    uint8_t i = 0;
  start_test:
    uint8_t x = 188;
  for (x; x > 0; x--)
  {
    analogWrite(Servo[i], x);
    delay(10);
  }
  for (x; x < 188; x++)
  {
    analogWrite(Servo[i], x);
    delay(10);
  }
  if (i == 3)
  {
    Serial.println(F("fertig"));
    return;
  }
  else 
  {
    i += 1;
    goto start_test;
  }
}

Ich verstehe nicht warum du hier ein “goto” einsetzen musst.

Nach ANSI C ist ein solches Goto erlaubt.
Aber meiner Ansicht nach ist das an dieser Stelle völlig unnötig.

Der Ausdruck “x” ist an der Stelle überflüssig.
for (x; x < 188; x++)
for (; x < 188; x++)

Alternativ:
while(x++<188)

HotSystems:
Ich verstehe nicht warum du hier ein "goto" einsetzen musst.

War für mich eine einfache Lösung, um in der for schleifen für 3 mal zu bleiben ohne wieder an die "Aufrufstelle" zurück zu springen.

Max_Beginner:
War für mich eine einfache Lösung, um in der for schleifen für 3 mal zu bleiben ohne wieder an die "Aufrufstelle" zurück zu springen.

Man kann for-Schleifen auch schachteln. D.h. um deine for-Schleife 3x aufzurufen, setzt Du einfach noch eine 2. for-Schleife drumherum. Dazu braucht es kein goto. Letztendlich baust Du mit deinem goto auch nur eine for-Schleife nach.

Und wie testest du mit analogWrite die Servos? Meine Servos verstehen kein normales PWM

Naja, also meine Servos lassen sich mit z.B.

void setup() {
}
void loop() {
  analogWrite(11, 100);
  delay(3000);
  analogWrite(11, 240);
  delay(3000); 
}

schon irgendwie ansteuern. Das ist möglicherweise auf Dauer nicht wirklich "gesund" aber immerhin, es bewegt sich was ... :slight_smile:

Daß sich der Servo irgendwie bewegt bestreiten wir ja nicht; nur daß eine sinnvolle Steuerung für alle Servomodelle dabei rauskommt. Ein PWM Signal mit kleinem Tastverhältnis ist das gleiche wie ein Steuersignal für Servos. Die Impulszeit sollte nur zwishen 1 und 2 ms liegen und die Frequenz bei 50Hz. Einige Servos (zB solche für Helikopter die schneller reagieren sollten) funktionieren auch mit 400 Hz. Da kommt ein PWM Signal mit 490 Hz nahe dran.

Grüße Uwe