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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren