Hallo zusammen,
ich komme gerade nicht weiter, brauche also jemanden, der mich in die richtige Richtung schubst.
Es geht darum einen Wechselrichter und ein Batteriemanagementsystem miteinander zu verbinden, die Kommunikation erfolgt über CAN. Dazu benutze ich einen Leonardo und das CANDIY Shield von Watterott in Verbindung mit der MCP2515 Library von coryfowler.
Die Kommunikation an sich ist nicht das Thema, kann von beiden Geräten Werte empfangen und welche an diese schicken. Sobald ich jedoch einen Wert empfange und diesen an das andere Gerät senden möchte, hakt es noch etwas. Ich vermute, dass meine Variablen nicht das richtige Format haben.
Das hier funktioniert einwandfrei, die Werte kommen an und werden in der Software meines BMS angezeigt:
unsigned char stmp3[8] = {highByte(550),lowByte(550),highByte(200),lowByte(200),0,0,0,0};
CAN0.sendMsgBuf(0x18FF50E5, 1, 8, stmp3);
Wenn ich jedoch die empfangenen Werte verwende, geht es in die Hose:
(Ich habe den Code auf die hoffentlich relevanten Teile gekürzt)
long unsigned int rxId;
unsigned char len = 0;
unsigned char rxBuf[8];
int unsigned si_bat_v;
//Werte als CAN Nachricht empfangen und verarbeiten
CAN0.readMsgBuf(&len, rxBuf);
si_bat_v = rxBuf[1]*256+rxBuf[0];
unsigned char stmp3[8] = {highByte(si_bat_v),lowByte(si_bat_v),highByte(200),lowByte(200),0,0,0,0};
Laut Datenblatt wird der ankommende Wert als U16 gesendet.
Ein Serial.print(si_bat_v) gibt mir die 550 aus, offenbar ist das jedoch nicht das Gleiche wie die 550 im Code oben. Habe es auch schon mit word(rxBuf[1], rxBuf[0]) statt rxBuf[1]*256+rxBuf[0] versucht, gleicher Effekt.
Bits und Bytes sind wohl noch nicht so ganz meine Welt.
Danke schon mal für eure Hilfe.
Guy