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







Zitieren

Lesezeichen