gpt4 book ai didi

c++ - 在arduino中解析canbus数据的最佳方法?

转载 作者:行者123 更新时间:2023-11-30 16:15:35 26 4
gpt4 key购买 nike

我有 esp32 和 arduino ide 连接到 canbus。我从 rx_frame.data.u8[] 获取数据流,该数据流有 8 个字节,例如。 [FF、FF、FF、61、3F、FF、FF、FF];

我需要使用 rx_frame.data.u8[3] 和 rx_frame.data.u8[4] 例如。 61 和 3F,将它们设置为 intel 字节顺序(反向字节顺序?),例如。 3F61 并转换为 DEC。它应该返回 16255。

问题:我无法将 rx_frame.data.u8[] 转换为 intel 字节顺序,然后转换为 DEC。我尝试过一些事情,我能够使用 String engspd1 = String(rx_frame.data.u8[4], HEX) + String(rx_frame.data.u8[3], HEX); 进行英特尔字节顺序。但现在我在将字符串 engspd1 转换为 DEC 时遇到问题。另外,我将解析大量数据,因此我不确定哪种方式最适合解析此类数据流。

附注抱歉,如果我在问题中因不同的命名而犯了一些错误。我刚刚开始使用 C、C++ 和 arduino ide。

#include <CAN_config.h>


CAN_device_t CAN_cfg;

void setup() {
Serial.begin(115200);
Serial.println("iotsharing.com CAN demo");
CAN_cfg.speed=CAN_SPEED_250KBPS;
CAN_cfg.tx_pin_id = GPIO_NUM_5;
CAN_cfg.rx_pin_id = GPIO_NUM_4;
CAN_cfg.rx_queue = xQueueCreate(10,sizeof(CAN_frame_t));
//start CAN Module
ESP32Can.CANInit();
}

void loop() {
CAN_frame_t rx_frame;
//receive next CAN frame from queue
if(xQueueReceive(CAN_cfg.rx_queue,&rx_frame, 3*portTICK_PERIOD_MS)==pdTRUE){

//do stuff!

if(rx_frame.MsgID == 217056256) {
String engspd1 = String(rx_frame.data.u8[4], HEX) + String(rx_frame.data.u8[3], HEX);
int engspd2 = engspd1.toInt(); // throws error of course
Serial.println(engspd1);
Serial.println(engspd2);
}

最佳答案

在您的代码中,您正在访问字节 5 和 4,而不是 3 和 4。这是您的问题吗? C 数组的索引为零,因此 3 和 4 是您想要的字节的位置。

关于c++ - 在arduino中解析canbus数据的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57041984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com