Hallo,

bei diesem Programm erhalte ich ganz unten bei "Umdrehungen3 = 0.0;" die Fehlermeldung, dass "Umdrehungen3" nicht deklariert ist, obwohl das kurz oberhalb passiert.
Wenn ich "Umdrehungen3" aber nicht in der Anweisung, sondern am Anfang des Programms als "static float" deklariere, dann klappt's.

Wieso ist das so?

Code:
//  **************************************UP lzahn3_ber  *******************************

float lzahn3_ber ( float x1, float y1) {

  float P0_P1 = sqrt(pow(x1, 2) + pow(y1, 2));                                  //Gerade P0-P1

  float CosinusW4 = (117140.0 - pow(P0_P1, 2)) / 107536.0;
  float W4 =  180.0 / 3.1415926536 * acos(CosinusW4);                           //  W4 in Grad

  float P1_P5  = sqrt((1.03310787 - cos(3.1415926536 / 180.0 * (W4 + 12.58))) * 91368.0);            // Linie P1-P5

  float W10 =  180.0 / 3.1415926536  *  acos((5184.0 + pow(x1, 2) + pow(y1, 2) - pow(P1_P5, 2))  /  (144 * sqrt (pow(x1, 2) + pow(y1, 2))));   // = W4 in Grad

  lzahn3 = sqrt((1.00419 - cos((154.23 - W10 - (180.0 / 3.1415926536 * atan(y1 / x1))) * 3.1415926536 / 180.0)) * 11361.6);

  if (lzahn3 >= 68.0   && lzahn3  <=  105.0)  {

    float delta_lzahn3 = lzahn3 - lzahn3_alt;       // berechnet die Differenz zum alten Wert


    float Umdrehungen3 = 0.05 * delta_lzahn3;    // 0.05 = 1 / 20.0; das sind die Umdrehungen für 1 mm Weg


    return Umdrehungen3;     // die Ausgabe erfolgt in Umdrehungen um die errechnete Längenänderung zu erreichen

  }      // >>>>   ENDE    if (lzahn3 >= 68.0   && lzahn3  <=  105.0)



  Serial.println ("FEHLER: lzahn3 ausser Bereich!!!");
  
  digitalWrite (52, HIGH);
  Umdrehungen3 = 0.0;      // keine Bewegung, da Fehler vorliegt
  return Umdrehungen3;     


}   //*************     ENDE  UP lzahn3_ber
vG

fredyxx