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?
vGCode:// **************************************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
fredyxx