Zeigervariante
Code:
void setup() {
  Serial.begin (250000);    //  diese Buadrate muss auch in der Konsole (Serieller Monitor) eingestellt sein
  while (!Serial);
}

void loop() {
  float xyz;
  Serial.print ("lzahn2 = ");
  Serial.println (lzahn2Prog (213.56994, 57.56108, &xyz ));     //  Druckt Ergebnis des UPs
  Serial.println (xyz);     //  Druckt xyz
  delay(2000);
}


//  **************************************Unterprogramm lzahn2Prog  *******************************


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

  float CosinusW4 = (114196.0 - pow(P0_P1, 2)) / 102960.0;
  *W4 =  acos(CosinusW4);                               // = W4 im Bogenmaß
  float lzahn2 = sqrt(   21164.49 - cos (*W4 +  0.09180432) *  20574.0   );

   return lzahn2;     // die Ausgabe erfolgt in mm
}
Referenzvariante
Code:
void setup() {
  Serial.begin (250000);    //  diese Buadrate muss auch in der Konsole (Serieller Monitor) eingestellt sein
  while (!Serial);
}

void loop() {
  float xyz;
  Serial.print ("lzahn2 = ");
  Serial.println (lzahn2Prog (213.56994, 57.56108, xyz ));     //  Druckt Ergebnis des UPs
  Serial.println (xyz);     //  Druckt xyz
  delay(2000);
}


//  **************************************Unterprogramm lzahn2Prog  *******************************


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

  float CosinusW4 = (114196.0 - pow(P0_P1, 2)) / 102960.0;
  W4 =  acos(CosinusW4);                               // = W4 im Bogenmaß
  float lzahn2 = sqrt(   21164.49 - cos (W4 +  0.09180432) *  20574.0   );

   return lzahn2;     // die Ausgabe erfolgt in mm
}