Guten Tag, Es gibt zwar schon genügend Threads über dieses Thema, und ich habe auch schon diverse Codezeilen gelesen, jedoch manche nicht ganz verstanden. Bis ich auf diese paar Zeilen gestoßen bin: void updateView(double number) { char value[100]; sprintf(value,"%g",number); } Bei den kommenden Funktionen, die auch funktionieren, gebe ich einen String entsprechend der X und Y Position auf mein EA DOGL128-6 Display aus. (Verwundung eines ATMEGA328p) char_x=90;//0-128 char_y=2; //0-8 display_write("Hallo"); Da ich jetzt aber einen Double-Wert ausgeben möchte und diese Funktion nur für Strings geeignet ist, habe ich mich nach einer Double to String Umwandlung umgeschaut. Doch leider funktioniert dies nicht: double number = 10; char_x=90;//0-128 char_y=2; //0-8 sprintf(value,"%g",number); //Umwandlung double to string display_write("value"); danke schonmal für eure Hilfe! lg Marcel
> void updateView(double number) > { > char value[100]; > sprintf(value,"%g",number); > display_write("value"); > ^ ^ > } 1) display_write(value); 2) char value[100]; ist eine lokale Variable, die nur innerhalb updateView() gültig ist. Deine Ausgabefunktion display_write() muss dann innerhalb updateView() aufgerufen werden. Oder du machst char value[100]; zu einer globalen Variable.
3) Schau dir die Funktionen dtostre() und dtostrf() aus der Library an. Die sind eventuell platzsparender als das relativ fette sprintf().
Danke schonmal für so eine schnelle Antwort ! Funktion dtostrf: char* dtostrf (double val,char width,char prec,char *s) Width sagt mir jetzt auf die schnelle nichts. prec wird die Anzahl der Nachkommastellen sein. und warum kommt beim char teilweise ein " * " vor ? lg
C-Grundlagen 2. oder 3. Stunde im C-Kurs "das ist eine Stringkonstante" und "value" ist eine andere. char value[100]; ist ein Feld von 100 chars Man kann eine Stringkonstante in ein char Feld speichern char value[100] = "das ist eine Stringkonstante"; Möchte man die Stringkonstante ausgeben, kann man sie direkt ausgeben: display_write("das ist eine Stringkonstante"); Oder man kann die Kopie aus dem Feld ausgeben, in dem man die Adresse des ersten Zeichens als Argument übergibt display_write(&value[0]); Oder aquivalent in kürzerer Schreibweise ohne &...[0] display_write(value);
Bei dtostrf brauchst du nicht raten, dafür gibt es eine Doku: http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html#ga060c998e77fb5fc0d3168b3ce8771d42 Also z.b. 10.0 ausgeben dtostrf(10, 2, 1, value); oder dtostrf(number, 2, 1, &value[0]); Das char *s in der Beschreibung ist ein weiterer Datentyp aus der 4. oder 5 C-Stunde: Ein Zeiger (Pointer) auf ein char. Du kennst schon &value[0] als Adresse des ersten Zeichens in deinem Feld value. Die kannst (musst) du an dieser Stelle übergeben.
> dtostrf(10, 2, 1, value); Doku hätte ich selber genauer lesen sollen :) dtostrf(10, 4, 1, value); ^ 2 Vorkommastellen + 1 Dezimalzeichen + 1 Nachkommastelle Bei dem ganzen nicht vergessen: libm.a ins Projekt aufnehmen. http://www.mikrocontroller.net/articles/FAQ#Aktivieren_der_Floating_Point_Version_von_sprintf_beim_WinAVR_mit_AVR-Studio
Na ich wusste schon, dass es sich dabei um strings und dergleichen handelt! Verwirrt hat mich nur der Stern bzw. Malpunkt * zb. char* dtostrf (double val,char width,char prec,char *s) ^ ^ | | ok, werde mich dann mit dem weiterbeschäftigen danke schön lg
Marcel Ofitsch schrieb: > Na ich wusste schon, dass es sich dabei um strings und dergleichen > handelt! > Verwirrt hat mich nur der Stern bzw. Malpunkt * Das widerspricht sich. Bevor Du weiterstoppelst: Kauf Dir ein C-Buch. Und lies es durch. Empfehlung: Brian Kernighan & Dennis Ritchie, "Programmieren in C", 2. Ausgabe, Hanser-Verlag. Ist zwar schon 20 Jahre alt, aber immer noch das Buch, das einem alles relevante über C vermittelt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.