Arduino UNO MINIMAでCAN通信(4byteデータを2つ送るには)

 CAN通信の活用方法を考えています。
今回テーマは「4byteデータを2つ送るには」です。
2byteを4つ送るとか応用もできます。

備忘記なんですが、参考に紹介します。










Arduino UNO R4 MINIMA CANWrite.inoサンプルスケッチの改変部分

static uint32_t value1 = 0;//millis()を入れてみます
static uint32_t value2 = 0;//サンプルスケッチのmsg_cntを入れてみます
//中略
value1 = millis();
// uint8_t const msg_data[] = {0xCA,0xFE,0,0,0,0,0,0};//オリジナル
  uint8_t const msg_data[] = {0,0,0,0,0,0,0,0};
  memcpy((void *)(msg_data), &value1, sizeof(value1));
  memcpy((void *)(msg_data + 4), &msg_cnt, sizeof(msg_cnt));//オリジナルそのまま使う
  CanMsg const msg(CanStandardId(CAN_ID), sizeof(msg_data), msg_data);
//中略


ESP32 TWAIreceive.inoスケッチの改変部分ほか

//中略
    //4byteデータ、2個の数値が送られてくる
    uint32_t value1 = 0;
    uint32_t value2 = 0;
    while (twai_receive(&message, 0) == ESP_OK) {
        Serial.printf("\nID: %lx\n", message.identifier);//改行してID:xx 表示して改行
        //"\n"は改行 書式指定文字 %lx 倍精度整数?を16進で出力する
        if (!(message.rtr)) {//リモートフレームじゃないとき
          //for (int i = 0; i < message.data_length_code; i++) {
          for (int i = 0; i <= 7; i++) {
            if (i <= 3) {
              value1 |= (uint32_t)( message.data[i] << (8 * i));
            } else if (i >= 4) {
              value2 |= (uint32_t)( message.data[i] << (8 * (i - 4)));
            }
            Serial.printf(" %d = %02x,", i, message.data[i]);
          }
          Serial.printf("\nvalue1:%lu", value1);//\nは改行(ニューライン)
          Serial.printf("\nvalue2:%lu\n\n", value2);
        }
        }//if (!(message.rtr))
}//while
//中略

CAN通信活用備忘記 続く

コメント

このブログの人気の投稿

ESP32pcntカウンタをテストしてみた

解決Arduino UNO MINIMAでCAN通信(MINIMA >> ESP32twaireceiveで受信できたが)

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