Arduino Uno CAN-BUS Message als Variable auslesen

Guten Abend und Hallo an alle ;),

nach gut 4 Tagen erfolglosen probierens und suchens wende ich mich nun an euch.
Ich versuche gerade mit dem Can-Bus shield Daten auszulesen und weiter zu verarbeiten.

hier der Code, mit dem ich es teste:

// demo: CAN-BUS Shield, receive data with check mode
// send data coming to fast, such as less than 10ms, you can use this way
// loovee, 2014-6-13


#include <SPI.h>
#include "mcp_can.h"


// the cs pin of the version after v1.1 is default to D9
// v0.9b and v1.0 is default D10
const int SPI_CS_PIN = 10;

MCP_CAN CAN(SPI_CS_PIN);                                    // Set CS pin

void setup()
{
    Serial.begin(115200);

START_INIT:

    if(CAN_OK == CAN.begin(CAN_500KBPS))                   // init can bus : baudrate = 500k
    {
        Serial.println("CAN BUS Shield init ok!");
    }
    else
    {
        Serial.println("CAN BUS Shield init fail");
        Serial.println("Init CAN BUS Shield again");
        delay(100);
        goto START_INIT;
    }
}


void loop()
{
    unsigned char len = 0;
    unsigned char buf[8];

    if(CAN_MSGAVAIL == CAN.checkReceive())            // check if data coming
    {
        CAN.readMsgBuf(&len, buf);    // read data,  len: data length, buf: data buf

        unsigned long canId = CAN.getCanId();
        
        Serial.println("-----------------------------");
        Serial.print("get data from ID: ");
        Serial.println(canId, HEX);

        for(int i = 0; i<len; i++)    // print the data
        {
            Serial.print(buf[i]);
            Serial.print("\t");
        }
        Serial.println();
    }
}

/*********************************************************************************************************
  END FILE
*********************************************************************************************************/

Das Problem steckt jedoch in diesem Bereich:

        for(int i = 0; i<len; i++)    // print the data
        {
            Serial.print(buf[i]);
            Serial.print("\t");
        }
        Serial.println();

Ich sende, z.B. auf dem ID 110, eine Nachricht mit dem Inhalt { 2 255 4 255 1 255 3 255 }
Diese Nachricht wird mir dann im Terminal auch richtig angezeigt, alles gut.

Im Terminal sieht es so aus:
get data from ID: 110
2 250 8 143 27 65 6 7

Nun müsste ich jetzt anfangen die daten wieder umzurechnen (2x255+250) um daraus wieder meine Sensorwerte zu bekommen.
Nur schaffe ich es nicht den Inhalt dieser 8 byte langen Nachricht in Variablen zu fassen.

Am liebsten würde ich die Nachricht wie folgt auslesen (nur schematisch):

byte MSB0;
byte LSB0;
...usw...

buf[8] {MSB0 LSB1 MSB2 LSB3 MSB4 LSB5 MSB6 LSB7}

Das geht jedoch nicht weil er mir es nicht direkt als Array von[8] speichert sondern in der For schleife bis len(länge der Nachricht) zählt,...

hat jemand damit erfahrung, oder eine lösungshilfe für mich parat? Ich bin gerade ziemlich ratlos/verloren....
Ich hoffe ich habe es nicht zu verwirrend alles geschrieben...

beste Grüße und vielen DANK

Patrick

Hallo,

in einem Array gibt es Indexpositionen. Jedes Byte kannste an eine bestimmte Indexposition schreiben. Wenn du beim auslesen von den Bytes immer den Index um eins erhöhst, landen die Bytes hintereinander im Array. Aber immer noch jedes für sich getrennt.

VIELEN DANK!
Als ich das vorhin gelesen habe, musste ich nochmal aufstehen und es sofort testen.
Was soll ich sagen, klar funktioniert. Ich hab es zwar schon mal getestet gehabt, hab da aber noch was anderes wohl falsch gehabt.
EGAL! Es funktioniert nun!

Ich bin dir SEHR dankbar, nun kann ich zufrieden schalfen gehen ;). Danke Nochmal!

Grüßle
Patrick