ich stehe ein wenig auf dem Schlauch...
Ich habe es "geschafft" Daten seriell an den Arduino zu senden und zu speichern.
Ich habe es "geschafft" CAN Bus Nachrichten zu versenden (MCP2515).
Nun möchte ich übermittelte Daten (Text gespeichert als String) per CAN Nachricht schicken. CAN IDs und Bytes werden ja als HEX angegeben (z.B. 0x57 für ein "W")
Wie schaffe ich nun den Text z.B. "WOLF" in 0x57 0x4F 0x4C 0x46 anzugeben.
Im loop hole ich mir den String
if (Serial.available() > 0) {
incomingString = Serial.readString(); // per ASCII über HTerm WOLF
}
}
und möchte ihn in seine einzelnen Buchstaben und HEX formatiert an folgendes geben
frame.can_id = 0x048;
frame.can_dlc = 4;
frame.data[0] = 0x00; // Soll "W" also 0x57
frame.data[1] = 0x00; // Soll "O" etc.
frame.data[2] = 0x00; // Soll "L"
frame.data[3] = 0x00; // Soll "F"
Vielleicht könnt ihr mir eine Richtung weisen,
vielen Dank
Sven
Mit strncpy wäre ich etwas vorsichtig, denn es arbeitet ja im Prinzip auch auf `\0'-terminierten C-Strings.
'W'
'O'
'L'
'F'
'\0'
Möglicherweise hilft es, nach Ende des Empfangs (wodurch eigentlich wird der bestimmt?) ein Null-Byte anzufügen oder die echten Zeichen mitzuzählen und dann mit memcpy zu arbeiten. Das ist dann aber immer noch C-Programmierung
Das Terminierungszeichen selbst braucht höchstwahrscheinlich nicht mit auf den CAN - es kommt darauf an, wie die Empfängerseite organisiert ist und mit der Nachrichtenlänge umgeht.
Vielen Dank für eure vielen Hinweise.
Ich werde mich mal näher in das Thema Strings einlesen. Die CAN Nachrichten triggern nur bestimmte Funktion in meine CarInfotainment Netzwerk auf dem Schreibtisch. Sollten zu lange oder fehlerhafte Botschaften geschickt werden ist dies daher nicht tragisch.
Unterscheide auch in Deinen Gedanken zwischen Strings (der Klasse) und strings (die mit '\0' terminierten C-Strings.
Nutze, wenn möglich, nur eine von beiden in einem Projekt.