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

标签 c++ c parsing arduino

我有 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/

相关文章:

c - 将从客户端发送的数据保存到队列中并解析

JavaParser 不会删除包声明之前的注释

javascript - 主干解析服务器对模型的响应

c++ - C++ 的双重检查锁是否有任何潜在问题?

c - 如何检查 Double 中的浮点精度

c - munmap_chunk() : invalid pointer

c++ - 解析输入文件以创建有向图 C++

c++ - 使用函数在 cin 和 ifstream 之间切换

c++ - 将具有不同类型的 vector 作为初始化列表传递给函数

c++ - 从 C++ 类调用 Objective C 实例方法?