String in Serial.write einbinden

OP #3296809
Lesenswert?
• ▲
▼
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?
Gast #3296834
Lesenswert?
• ▲
▼
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.
Persönliche Seite #3296881
Lesenswert?
• ▲
▼
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.
Gast #3304098
Lesenswert?
• ▲
▼
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.
Persönliche Seite #3304385
Lesenswert?
• ▲
▼
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.