【问题标题】:Need help on understanding Writefile需要帮助了解 Writefile
【发布时间】:2016-05-11 09:49:03
【问题描述】:

我希望您能帮助我理解一些对我的项目有很大帮助的代码。没有过多的细节,这就是导致我这么多问题的原因:

    bool Serial::WriteData(char *buffer, unsigned int nbChar)
{
    DWORD bytesSend;

    //Try to write the buffer on the Serial port
    if(!WriteFile(this->hSerial, (void *)buffer, nbChar, &bytesSend, 0))
    {
        //In case it don't work get comm error and return false
        ClearCommError(this->hSerial, &this->errors, &this->status);

        return false;
    }
    else
        return true;
}

我使用这个函数通过串口向我的 Arduino Uno 发送一个变量,如下所示:

snprintf(Data, sizeof(Data) - 1, "%3.1f", (int)(pf->speedKmh)*1.0);
SP->WriteData(Data, sizeof(Data) - 1); printf("\nData\n");

一些有用的信息:

  • speedkmh 是一个浮点数

  • 字符数据[8] = "";

所以我的问题是:我想知道确切发送到 Arduino 的是什么。目前我真的不知道它是否正在发送一个数组,一次一位,如果它发送一个浮点数等等......你能帮我理解这个吗?

谢谢!

【问题讨论】:

  • 您的意思是使用 strlen(Data) 而不是 sizeof(Data)。现在,您正在发送垃圾字节,无论字符串终止符之外的内容。如果您需要了解实际发送的内容,请添加日志记录。尽管不太可能展示该错误,但串行端口间谍实用程序是更好的选择武器。

标签: arduino serial-port writefile


【解决方案1】:

以下行: snprintf(Data, sizeof(Data) - 1, "%3.1f", (int)(pf->speedKmh)*1.0);

将您的浮点数转换为字符串(字符数组)。那么

SP->WriteData(Data, sizeof(Data) - 1); printf("\nData\n");

通过串行端口一次一个地发送这些字符。

顺便说一句,不清楚为什么要将浮点数转换为整数,然后再转换为浮点数(将其乘以 1.0),然后再转换为字符串。正如我所看到的,这将导致截断浮点数的小数部分,然后将误导性的“.0”附加到字符串(来自控制字符串的“.1f”部分)。即 1.0 和 1.4 都将转换为“1.0”。

【讨论】:

    猜你喜欢
    • 2017-06-19
    • 2016-05-03
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    相关资源
    最近更新 更多