Es wird zwar compiliert und hochgeladen, aber es funktioniert nicht.
Eine Warnung erscheint:
"warning: invalid conversion from 'byte {aka unsigned char}' to 'unsigned char*' [-fpermissive]
ModBefehl.getBytes (dataDrive[1], 2); "
Es werden 2 Zeichen gesendet, in ModBefehl eingelesen und diese sollen in ein byte-Array (nicht in ein char-Array).
Der letzte Schritt funktioniert nicht ...
"warning: invalid conversion from 'byte {aka unsigned char}' to 'unsigned char*' [-fpermissive]
ModBefehl.getBytes (dataDrive[1], 2); "
Was ist daran falsch?
byte* ist etwas völlig anderes als byte
Was willst du mit dem [1] hinter dataDrive überhaupt erreichen?
Mal abgesehen vom Datentyp String für ModBefehl über den Tommy schon zurecht geschimpft hat.
byte* und char* ist übrigens fast dasselbe. Das was du mit read liest, ist zwar formal ein int, damit du eine -1 als "keine Daten vorhanden" erkennen kannst. Aber wenn es keine -1 ist, kann es genausogut als char wie als byte behandelt werden und in einem entsprechenden Array gespeichert werden.
Rubbernose:
Es werden 2 Zeichen gesendet, in ModBefehl eingelesen und diese sollen in ein byte-Array (nicht in ein char-Array).
Der letzte Schritt funktioniert nicht ...
das ist nicht was du oben auszugsweise gepostet hast.
von byte array zu char array wäre z.B. so:
char source[] = {0x30, 0x31};
byte target[2];
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
memcpy(target, source, 2) ;
Serial.print(F("source "));
Serial.print(source[0], HEX);
Serial.print(F(" "));
Serial.println(source[1], HEX);
Serial.print(F("target "));
Serial.print(target[0], HEX);
Serial.print(F(" "));
Serial.println(target[1], HEX);
}
void loop() {
// put your main code here, to run repeatedly:
}
Oh, jetzt wirds aufwändig....
"byte* ist etwas völlig anderes als byte" Wo kann man das nachlesen? Unter Arduino.cc habe ich nichts gefunden.
"Was willst du mit dem [1] hinter dataDrive überhaupt erreichen?"
Das ist die zweite Stelle im Array.
Mal abgesehen vom Datentyp String für ModBefehl über den Tommy schon zurecht geschimpft hat.
"byte* und char* ist übrigens fast dasselbe."
Leider nur fast. Die IDE liefert einen Fehlermeldung.
"Das was du mit read liest, ist zwar formal ein int, damit du eine -1 als "keine Daten vorhanden" erkennen kannst. Aber wenn es keine -1 ist, kann es genausogut als char wie als byte behandelt werden und in einem entsprechenden Array gespeichert werden."
Wenn das so einfach ist, wie kann man denn den String "ff" in das Byte-Array bekommen? Ich verstehe es einfach nicht.
@noiasca
ich möchte, von Anfang an, einen String (z.B. FF) in ein byte-Array übertragen. Nicht von byte in char!!!
Ich verstehe überhaupt nichts mehr.
Der Monitor liefert statt dataDrive[1] = ff (oder 255)
dataDrive 66 66 0 0
Wieso 66? ff = 255 !
Der gesamte Code besteht aus mehreren Seiten und darf nicht veröffentlicht werden!
Ich möchte auch nichts per Serial.print(dataDrive[0], HEX) senden, sondern den hexWert nur in dataDrive[1] schreiben.
Vielleicht ist das zu einfach?
ff in einem String Objekt sind zunächst mal zwei Zeichen. Zwei kleine f.
ein kleines f
102 -> 0x66 -> f
ob du es am Serial.Monitor ausgibst oder über Modbus ausgibst ist zunächst nicht relevant. Du musst verstehen was du in deiner Eingabe wirklich hast und was du in der Folge übertragst. Wie willst du sonst wissen was am anderen Ende vom Bus rauskommen wird?
UND DAZU TRÄGT EIN KLEINER KOMPILIERBARER SKETCH BEI, erst recht dann, wenn der Rest geheim bleiben muss.
Gib dir auch ruhig mal deine empfangenen Zeichen als Hex aus bevor du sie an deinen Eingabe-Buffer concatinierst. Na was kommt an wenn du f sendest? Gegencheck: was musst du senden damit (Ox)FF ausgegeben wird?
Es funktioniert!
Ich sende vom PC einfach die Dezimalwerte! Im Arduino werden die in Integervariablen abgespeichert, verrechnet und anschließend direkt in ein unsigned char Array eingetragen. Über die crc16.h wird alles dann noch verschlüsselt und der Frequenzumrichter kann programmiert werden!
Danke an Alle (für die fachkundigen Beschimpfungen)!