einen UNO für die Trockenversuche. Später einen MEGA
einen UNO für die Trockenversuche. Später einen MEGA
ok, für einen Uno ist meine Lösung nicht geeignet, wohl aber für einen Mega.
Es geht um das unsägliche Serial.print mit seinen schauderhaften Formatiermöglichkeiten.
In C nutzt man für Ausgaben den sehr mächtigen Befehl printf(), wenn man direkt ausgeben will, bzw. sprintf(), wenn man die Ausgabezeile erst einmal in einen Puffer-String kopieren will.
Da eine direkte printf() Ausgabe bei Arduino Sketch nicht möglich ist, bleibt also nur sprintf(), und dann den Pufferstring per Serial.print (ohne weitere Formatierung).
Beide C-Funktionen nutzen ein 100% identisches Formatiersystem.
Aber:
Die schlauen Arduino-Entwickler haben die Float-Ausgabe für sprintf() bei AVRs unterbunden. Will man sie nutzen, kann man aber die lib patchen.
Das ist viel Aufwand und eine Menge Holz für einen Anfänger, und unsinnig für einen Uno, da zuwenig Speicher. Für einen Mega ist es den Aufwand aber wert.
Statt
Serial.print ("Drehwinkel2 = ");
Serial.println (Drehwinkel2_ber (),4);
hättest du dann
char sbuf[100]; // string buffer
sprintf(sbuf,"Drehwinkel2 = %.4f \n ", Drehwinkel2_ber () ); // sbuf zusammensetzen, evtl auch mit noch viel mehr Variablen und String-Bezeichnern
Serial.print(sbuf);
Das macht bei 1 string und 1 Variablen noch nicht viel aus, erleichtert aber erheblich die Formatierung bei komplexeren Aufgaben.
Wie gesagt, sehr mächtig, ein wenig aufwändig, aber anschließend höchst effizient, und du siehst leichter, welche Variablen evtl falsch formatiert wurden (int vs. float).
Hier ist die Beschreibung zu printf und sprintf:
http://www.cplusplus.com/reference/cstdio/printf/
http://www.cplusplus.com/reference/cstdio/sprintf/
Wenn es dich interessiert, poste ich dir auch den Link zum Float-Patch für den Mega.
Ne andere Möglichkeit wäre erstmal Arduino beseite zu legen und sich einen freien Compiler und IDE zu installieren.
Im Moment geht es ja eher darum welche Daten Du hast und wie Du sie strukturieren kannst. Außerdem welche Operationen auf diese Daten nötig sind und wie sich beides in C(++) ausdrücken läßt, so daß Du ein Berechnungsmodul hast, welches sich dann auch in der Arduino Platform benutzen läßt.
Meiner Meinung nach ist das einfacher, denn wenn die Berechnung von Ein- und Ausgabe ordentlich getrennt ist, läßt sich das separat testen, da gibt's dann auch 'nen Debugger.
So'n Consolenprogramm dann in Header und C(PP)-File zu zerlegen und dem Arduino Sketch bezufügen ist dann einfacher als 'ne System-Lib zu patchen.
Im Moment geht's doch eher um's erlernen von C(++) und dann in weiteren Schritten den Spezifika der Arduino-Umgebung (ganz davon abgesehen das jeder Compiler-Upload-Lauf den µC unnötig 'verschleißt').
Meine 50ct
Gruß
Chris
P.S. Kannst Du bitte mal beide DrehwinkelBerechnungen komplett zeigen?!?
Geändert von botty (23.05.2016 um 21:43 Uhr)
@botty:
das stimmt so nicht: die besagte System lib zu patchen ist überhaupt kein Problem - im Gegensatz dazu, auf die Arduino IDE mit ihren ganzen Libs zu verzichten oder gar
ein Consolenprogramm in Header und C(PP)-File zu zerlegen und dem Arduino Sketch bezufügen, schon sehr.
Das Patchen hingegen ist ein einfacher Kopierbefehl - aber es macht nur mit einem Mega Sinn.
Ein Arduino Zero oder Due aber kann das alles bereits ohne jeden Patch, da klappt alles "von Haus aus".
aber ich verstehe, wenn man als Anfänger erst mal andere Probleme hat.
Danke für deine umfangreiche Info, aber z.Z. habe ich erst mal eine Menge anderer Probleme zu lösen.
Es ist aber trotzdem gut zu wissen, dass es sowas gibt.
Gruß
fredyxx
Lesezeichen