ich bastle mir gerade selber einen 3D Scanner zusammen und muss dafür die aufgenommenen Maße mit dem Aufnahmewinkel verrechnen, scheitere aber leider bei den Winkelfunktionen.
Beispiel: Ein rundes Objekt soll von vier Seiten mit jeweils 90° Abstand gescannt werden.
Zum berechnen der Koordinaten nutze ich nun folgende Zeilen:
var = 0
for(int i = 0; i < 4; i++) {
valx = val * cos(var);
valy = val * cos(var);
Serial.println(valx);
Serial.println(valy);
var = var + 1.570796327; // <- 90° als Bogenmaß
}
Es soll also jedes mal die X und Y Koordinate ausgespuckt werden und dann die Variable (var) für den Winkel um 90° (also 1.570796327 im Bogenmaß) hochgesetzt werden.
Eigentlich müsste ich jetzt für die 4 Schritte bei einer Entfernung von bspw. 50 mm folgende Ergebnisse bekommen:
valx = 50
Valy = 0
valx = 0
Valy = 50
valx = -50
Valy = 0
valx = 0
Valy = -50
Leider bekomme ich die Maße so ausgespuckt, als würde er 8-9 Messungen machen bis er einmal rum ist. Was mache ich falsch?
Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Dann ist er auch auf mobilen Geräten besser lesbar.
Das kannst Du auch noch nachträglich ändern.
Wie sind Deine Variablen deklariert? Gib uns lieber den kompletten Sketch.
Kommentare wie 'plus 1' sind herrlich sinnlos - DAS sehen selbst wir schon am Sketch.
Viel schöner wäre - WAS macht var1 und WAS var2 - warum sind Diese durchnummeriert?
analogReadResolution(12);
Das hätte ich bei Uno/Nano noch nicht gesehen - somit wirst Du wohl 'Was Anderes' benutzen - WAS?
valmw ... Mittelwert - soweit ja klar - warum nicht valMittelwert nennen? (wobei mw ja noch geht).
Was Dir die Berechnungen der trigonometrischen Funktionen zurück geben, hast Du noch nicht erwähnt - nur, daß Du mit anderen Ergebnissen gerechnet hast.
In wie fern unterscheiden Sich Soll von Ist?
Ich arbeite noch mit "+1" weil ich wie gesagt noch ein Anfänger bin.
Variable 1 bestimmt den Winkel des Drehtellers und Variable 2 die Höhe des Sensors.
Und "valmw" statt "valMittelwert" ? Naja ich bin eben faul ^^
Aber es funktioniert jetzt alles. Ich hatte mich noch nicht mit float und double auseinander gesetzt und wusste nicht, dass das so einen großen Unterschied machen kann. Ich hab mir beides jetzt mal angeguckt erkenne den Unterschied nicht ganz. Es sorgen doch beide einfach für eine genauere Ausgabe oder nicht?
Je verwendetem µC macht Das schon einen Unterschied - auf Uno/Nano sind Beide aber identisch.
Du verschweigst ja weiter, was für einen Arduino als Rechenknecht eingespannt hast.
Was spricht gegen sprechende Variablen-Namen?
WinkelDrehteller ist irgendwie wesentlich umgänglicher, als var1.
Oder HöheObjekt sagt direkt was ganz Anderes aus als var2.
Gewöhne Dir 'schönen' Code an - selbst Du wirst Dich in Deinem eigenen Code in einigen Wochen nur sehr mühsam zurecht finden - Da sind erklärende Kommentare (WAS soll diese Zeile eigentlich??) und sprechende namen Gold wert.