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通信活用備忘記 続く
最新の画像[もっと見る]
-
Arduino UNO MINIMAでCAN通信(4byteデータを2つ送るには) 4日前
-
Arduino UNO MINIMAでCAN通信(ESP32 TWAIreceive.ino受信時変更点) 2週間前
-
JBL Flip4 スピーカー落下で電源が入らなくなった 4週間前
-
JBL Flip4 スピーカー落下で電源が入らなくなった 4週間前
-
JBL Flip4 スピーカー落下で電源が入らなくなった 4週間前
-
JBL Flip4 スピーカー落下で電源が入らなくなった 4週間前
-
Arduino UNO MINIMAでCAN通信(MINIMA >> UNO R4 Wi-Fi 受信データを配列に入れる) 1ヶ月前
-
Arduino UNO MINIMAでCAN通信(MINIMA >> UNO R4 Wi-Fi 受信データを配列に入れる) 1ヶ月前
-
Arduino UNO MINIMAでCAN通信(MINIMA >> UNO R4 Wi-Fi 受信データを配列に入れる) 1ヶ月前
-
解決Arduino UNO MINIMAでCAN通信(MINIMA >> ESP32twaireceiveで受信できたが) 1ヶ月前
※コメント投稿者のブログIDはブログ作成者のみに通知されます