Hallo ich habe ein Char array mit 6 Zahlen. Diese Zahlen kann ich uber Pfeiltasten hoch bzw runterzählen. jetzt zu meinem Problem ich möchte diese Zahl in einem Serial.write einbinden. Leider funktioniert das nicht. einmal mein grober Aufbau char load[] = {'0','0','0','0','0'}; Serial.write("Load beträgt: %s",load); Fehler: Programmierger_t_ino.ino: In function 'void loop()': Programmierger_t_ino:160: error: invalid conversion from 'const char*' to 'const uint8_t*' Programmierger_t_ino:160: error: initializing argument 1 of 'virtual size_t Print::write(const uint8_t*, size_t)' Programmierger_t_ino:160: error: invalid conversion from 'char*' to 'size_t' Programmierger_t_ino:160: error: initializing argument 2 of 'virtual size_t Print::write(const uint8_t*, size_t)' Was mach ich falsch?
Sebastian Graw schrieb: > Serial.write("Load beträgt: %s",load); Serial.write("Load beträgt: %d %d %d %d",load[0],load[1],load[2],load[3] );
Peter II schrieb: > Serial.write("Load beträgt: %d %d %d %d",load[0],load[1],load[2],load[3] > ); es sind ja chars, also Serial.write("Load beträgt: %c %c %c %c",load[0],load[1],load[2],load[3] );
Sebastian Graw schrieb: > Serial.write("Load beträgt: %s",load); Formatiert Serial.write die übergebenen Argumente analog zu printf? Sieh Dir mal genau die Dokumentation dieser Funktion an.
Serial.write wird wohl einen "echten" String als Parameter erwarten. char Etwas [] = "0000"; sollte gehen Die Manipulation mittels: Etwas [ 1 ] = '9'; sollte kein Problem darstellen. um dann mittels: Serial.write ( Etwas ); ausgegeben zu werden. Bei den Arduinos gibt es auch einen Datentyp mit Namen String. Eventuell ist der noch besser geeignet.
amateur schrieb: > Serial.write wird wohl einen "echten" String als Parameter erwarten. Tut es nicht:
1 | virtual size_t Print::write(const uint8_t*, size_t) |
Das ist der Funktionsprototyp. Offensichtlich ist das eine Funktion, die ein Array aus uint8_t ausgibt, und die Anzahl der zu schreibenden Bytes wird als zweites Argument übergeben. Woher ich den Funktionsprototypen habe? Fehlermeldungen angucken. Da steht er drin.
Rufus Τ. Firefly schrieb: > Fehlermeldungen angucken. Da steht er drin. und wenn es noch weiter übladene gibt?
>und wenn es noch weiter übladene gibt
Bei den Arduinos gibt's deren wenigstens drei.
_(val)
_(str)
_(buf,Siz)
amateur schrieb: > Bei den Arduinos gibt's deren wenigstens drei. Das hier ist der Forenbereich "PC-Programmierung". Arduino & Co. passt hier nicht hin. Egal, selbst wenn es das täte, keine der anzunehmenden überladenen Varianten nimmt eine Stringformatierung analog zu printf vor.
Sorry das ich den falschen Forenbereich gewählt habe. Wollte nur noch eben sagen wie ich das Problem gelöst habe. sprintf(outString,"blablabla: %s\r\n",load); Serial1.write(outString);
Sebastian Graw schrieb: > Wollte nur noch eben sagen wie ich das Problem gelöst habe. > > sprintf(outString,"blablabla: %s\r\n",load); > Serial1.write(outString); damit hast es fehlerhaft gelöst. Bei Load gibt es das 0 Byte(stringende) nicht. Es kann also passieren das du viel mehr Daten ausgibst als gewünscht. Das es abhängig davon welche Daten im speicher hinter der Variabel kommen.
load ist ein array in dem immer 6 Zeichen stehen. char load[] = "000000"; Diese Zahlen kann ich mithilfen von Tasten einzeln hoch bzw runter zählen. Funktioniert eigentlich alles super.
Sebastian Graw schrieb: > load ist ein array in dem immer 6 Zeichen stehen. > > char load[] = "000000"; genau das ist das Problem. Es müssten dort 7 Zeichen stehen, damit es ein String für %s ist. '0', '0', '0', '0', '0','0', 0
Peter II schrieb: > genau das ist das Problem. Es müssten dort 7 Zeichen stehen, damit es > ein String für %s ist. Das aber tun sie, wenn das Array mit einer Stringkonstanten initialisiert wird:
1 | char load[] = "000000"; |
Ein sizeof(load) wird 7 ergeben. Wenn so initialisiert wird, wie zu Anfang* des Threads
1 | char load[] = {'0','0','0','0','0','0'}; |
dann ist das Array nur 6 Bytes groß, und ein sizeof(load) ergibt 6. *) ich habs auf sechs Zeichen korrigiert, das Beispiel am Anfang enthält sogar nur fünf
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.