hiro yamamoto works

マイコンハード、ソフトを作ったりしています。
お家や現場のお困りごと解決に!
内容利用は自己責任でお願いします。

Arduino UNO MINIMAでCAN通信(MINIMA >> UNO R4 Wi-Fi 受信データを配列に入れる)

2025-01-27 11:34:48 | CAN通信

参考になる情報を見つけたので、備忘記録として投稿します。
情報公開してくださっている方に感謝します。

笑って許してくれる方だけ見てくださいね!
本来目的のESP32受信で問題点があり、原因切り分け調査のための、
UNO R4 WIFI受信調査となっています。
送信 Arduino UNO R4 MINIMA(CANWrite.ino)+CANトランシーバ:SN65HVD230
受信 Arduino UNO R4 WIFI(CANRead.ino)+CANトランシーバ:SN65HVD230
これでやっています。

サンプルスケッチ"CANRead.ino"は決められた書式でのシリアルモニタ表示はできますが、
  if (CAN.available()) {
    CanMsg const msg = CAN.read();
    Serial.println(msg);
  }

データのみを使いたい時どうしたら良いか疑問が湧いて調べたら、次のようなコードをみつけました。
これで解決できます。

  if (CAN.available())  {
    CanMsg const msg = CAN.read();
//sizeof(msg.data)は"msg.data"メモリサイズをバイト単位で返す
    uint8_t rx_data[20];
//メモリ領域msg.dataの先頭からmsg.dataのメモリサイズバイトをメモリ領域rx_dataにコピーする
    memcpy(rx_data, &msg.data, sizeof(msg.data)); // rx_data配列へコピー
    uint32_t rxId = msg.id;
    uint8_t rxLen = msg.data_length;
    Serial.print("id:"); // CAN_ID
    Serial.print(rxId, HEX);
    Serial.print(" dlc:"); // data length code
    Serial.print(rxLen, HEX);
    Serial.print(" data:");
    for (int i = 0; i
      Serial.print(rx_data[i], HEX);
      Serial.print(" ");
      //Serial.println(msg);
    }
    Serial.println("");
  }

ありがたく使わせていただきます。
以上



最新の画像もっと見る

コメントを投稿