Come estrarre variabili da messaggio CAN arduino R4

Buongiorno,

vorrei estrarre le 3 variabili: CAN_ID, sizeof_msg_data e msg_data dal codice di esempio per la ricezione di un messaggio CAN extended frame su arduino UNO R4 MINIMA.
L'idea è quello poi di manipolarle per controllare gli IO.
Come posso fare?

Questo è l' esempio che stampa sul monitor seriale il messaggio ricevuto:



#include <Arduino_CAN.h>


void setup() {
  Serial.begin(115200);
  while (!Serial) {}

  if (!CAN.begin(CanBitRate::BR_250k)) {
    Serial.println("CAN.begin(...) failed.");
    for (;;) {}
  }
}

void loop() {
  if (CAN.available()) {
    CanMsg const msg = CAN.read();
    Serial.println(msg);
  }
}

Buonasera e benvenuto nella sezione Italiana del forum,

cortesemente, come prima cosa, leggi attentamente il REGOLAMENTO di detta sezione, (... e, per evitare future possibili discussioni/incomprensioni, prestando molta attenzione al punto 15), dopo di che, come da suddetto regolamento, fai la tua presentazione NELL'APPOSITA DISCUSSIONE (... quello che vedi in blu è un link, fai click su di esso per raggiungere la discussione) spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.

Detto questo, come richiesto al punto 7 del succitato regolamento, per favore edita il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone a forma di piccola matita :pencil2: che si trova in basso del tuo post), seleziona la parte di codice e premi l'icona <code/> nella barra degli strumenti per contrassegnarla come codice. Inoltre, così com'è, non è molto leggibile ... assicurati di averlo correttamente indentato nell'IDE prima di inserirlo (questo lo si fa premendo ctrlT su un PC o cmd T su un Mac, sempre all'interno del IDE).

Grazie,

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione e sistemato il codice come indicato, nel rispetto del regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farla al più presto. :wink:

1 Like

Benvenuto, Andrea :slight_smile:

Nota: gli accenti ``` del CODE sono diversi dall'apostrofo ' sulla tastiera in alto a destra!

Ok, ho sistemato il post e fatto la presentazione.

In teoria dalla libreria, msg è un oggetto di classe CanMsg, quindi hai alcune funzioni ed alcuni membri pubblici (richiamabili):

Serial.print( "Can ID: "); 
if( msg.isStandardId()) 
  Serial.println(msg.getStandardId());
else
  Serial.println(msg.getExtendedId());
Serial.print("data length: "); Serial.println( msg.data_length );
Serial.print("data: "); 
for(int i=0; i<msg.data_length; i++ )
  Serial.print( msg.data[i] ); 

Ogni elemento di msg.data è un singolo uint8_t (unsigned a 8 bit)

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.