CAN-bus R4 Minima

  1. Io ti ho detto di fare Serial.println(msg.data); la printTo() è interna alla libreria, puoi guardarla per vedere che lei semplicemente stampa tutti e 8 i byte in esadecimale, ovvero stampa di un testo il codice ascii di ogni singola lettera

  2. Il problema dei numeri che hanno più di un byte è spedirli perchè devi spezzarli in più byte, spedirli e poi rimetterli insieme.
    L'esempio CANwrite già ha dentro un esempio per spedire un numero, spedisce un contatore a 32 bit. Anche un float è 32 bit, un int su arduino R3 è 16 bit (2 byte) ma su R4 è 32 bit

uint32_t msg_cnt = 4660;   // in esa 0x00001234 4 byte 0,0,12,34
...
uint8_t const msg_data[] = {0,0,0,0,0,0,0,0};
memcpy((void *)(msg_data + 4), &msg_cnt, sizeof(msg_cnt));

quel pezzo scrive i 4 byte del contatore dentro al msg dalla posizione +4 ovvero gli ultimi 4 byte

P.S. il msg_data SEMPRE un array di 8 byte deve essere, devi solo capire come scriverci dentro

in ricezione (ma non l'ho provato): secondo parametro memcpy dovrebbe essere senza & perchè un array è già un puntatore

uint32_t mioVal;  // 4 byte
...
  CanMsg const msg = CAN.read();
  memcpy((void *)(mioval), msg.data+4, sizeof(mioVal));
  Serial.print("mioVal="); Serial.println(mioVal);