PRIMA, danke
Gruß
fredyx
PRIMA, danke
Gruß
fredyx
hallo,
was mich ganz nebenbei etwas stutzig macht, ist dein
Serial.begin (250000);
das funktioniert?
üblich ist eher was in der Größenordnung bis max.
Serial.begin (115200);
was schon sehr schnell ist, aber es könnte sein, dass die Arduino IDE die 250000 automatisch auf default zurücksetzt.
---
zurück zum Topic:
es ist kein "schöner Programmierstil" und stört auch das Verstehen und Debuggen, wenn du sowohl als Rückgabewert als auch bei den Parametern eine Wert-Änderung durchführst.
(Abgesehen davon, dass mir unklar ist, wieso du überhaupt beide Werte (lzahn2Prog Rückgabewert und W4) in derselben Funktion berechnest bzw. änderst...)
"schöner", "üblicher" und "lesbarer" ist:
a) wenn nur 1 Wert zu ändern oder zurückzugeben: als Rückgabewert oder per Referenz (&) oder per Zeiger(*) bei den Parametern
b) wenn 1 Wert benötigt wird, um die richtige Ausführung zu kontrollieren, dann diesen als Funktions-error-Wert zurückgeben.
c) wenn mehrere Werte geändert werden, mit denen "gerechnet" wird, dann alle als Parameter, nicht den/die einen als Parameter und einen anderen als Funktionswert..
Eingedampfte Variante:
Code:float w4berechnen (float x1, float y1) { return acos((114196.0 - x1*x1 + y1*y1) / 102960.0); } float lzahn2berechnen (float W4) { return sqrt( 21164.49 - cos (W4 + 0.09180432) * 20574.0 ); } void setup() { Serial.begin (250000); while (!Serial); } void loop() { float x1 = 213.56994; float y1 = 57.56108; float w4 = w4berechnen(x1, y1); float lzahn2 = lzahn2berechnen(w4); Serial.print ("lzahn2 = "); Serial.println (lzahn2 ); Serial.print ("w4 = "); Serial.println (w4); delay(2000); }
Wunderwunderschön
eingedampfte, sublimierte und obfuscierte Variante:
nein, Sisor's Variante ist wirklich schönerCode:void loop() { float x1 = 213.56994; float y1 = 57.56108; float lzahn2 = sqrt( 21164.49 - cos ( ( acos((114196.0 - x1*x1 + y1*y1) / 102960.0) ) + 0.09180432) * 20574.0 ); Serial.print ("lzahn2 = "); Serial.println (lzahn2 ); delay(2000); }![]()
Ja funktioniertwas mich ganz nebenbei etwas stutzig macht, ist dein
Serial.begin (250000);
das funktioniert?
Es ging mir im Moment nur mal darum zu erfahren, ob und wie es denn geht.(Abgesehen davon, dass mir unklar ist, wieso du überhaupt beide Werte (lzahn2Prog Rückgabewert und W4) in derselben Funktion berechnest bzw. änderst...)
Da das, was ihr oben seht nur ein sehr kleiner Teil von dem sein wird, was ich noch machen will, dachte ich mir, dass die Funktionen/ Unterprogramme doch einen gewissen Funktionsblock darstellen sollten, damit das Programm nachher noch einigermaßen übersichtlich ist und nicht aus lauter Funktionen mit nur einer Formel besteht. Da ich aber erst am Anfang stehe, stecke ich sowohl mit Konzept als auch mit den Programmierkenntnissen noch in den Kinderschuhen.
Am Ende soll das mal die Steuerung für ein Baggermodell mit 6 Motoren werden, das selbstständig verschiedene Programme abfahren soll.
Gruß
fredyxx
Geändert von fredyxx (19.05.2016 um 23:11 Uhr)
edit:
du hast recht, ich habe nachgesehen, es könnte tasächlich funktionieren, es wird "nur empfohlen", bestimmte Werte für die serielle Konsole (PC) bis max. 115200 zu verwenden: https://www.arduino.cc/en/Serial/Begin
Geändert von HaWe (20.05.2016 um 08:55 Uhr)
Lesezeichen