【问题标题】:Android serial read from Arduino float println()从 Arduino float println() 读取 Android 串行
【发布时间】:2014-06-26 04:02:27
【问题描述】:

我正在尝试从模拟 Arduino 程序的串行输入中读取十进制值。为简单起见,以下是基本要点:

Serial.write(56);//decimal value
Serial.println('1001.56');// float value

Arduino 代码基本上是写各种整数,但我偶尔需要它来打印浮点数。当我在我的 Android 程序上读取十进制输出时,我得到以下值:

056 - corresponds to the decimal
049 051 054 050 050 013 010 - is the output from the '1001.56'

我知道 013 和 010 代表什么,但是前 5 个十进制值如何对应 1001.56?我整个上午都在看 ASCII 表,没有运气。

【问题讨论】:

    标签: java android serial-port arduino


    【解决方案1】:

    Serial.println('1001.56');//浮点值

    这是错误的 - 在 C/C++ 中,' ' 表示 单个 字符,而 " " 表示字符串

    056 - 对应小数

    这是一个原始值 - 它可以是数字 56,也可以是数字“8”的字符代码

    049 051 054 050 050 013 010 - 是“1001.56”的输出

    可能不是 - 它可能是字符串 "13622\r\n" 或者它可能是引用错误产生的一些垃圾值,然后是 println() 的终止回车和换行。

    解决您的报价问题,您将更好地了解自己的立场。

    但是,您可能仍然会遇到一个问题,即您不一定会通过串行接口在写入数据的相同分组块中接收数据,而是可能以相当任意大小的块接收数据,您必须将其缝合回去并在其中找到分隔的“\r\n”序列。

    【讨论】:

    • 谢谢。我会尽快尝试。我希望“把事情拼凑起来”,我只是期待完全不同的数字。我这样做是某种错误消息。
    • 不是错误信息,而是错误的结果。
    【解决方案2】:

    十进制的 13 和 10 是回车和换行。请注意,您使用的是“Serial.println()”与 Serial.print()。

    其中 ln 附加使用 13d(0x03) 和 10d(0x0A) 发送的字符串

    如果你不想要它们。只需使用 Serial.print()。您以后可能希望它们在哪里,以指示您的行尾,将 char 的字符串解析回浮点数。

    【讨论】:

    • 如果我不清楚,我很抱歉。我知道 13 和 10。我不知道其他数字在哪里以及前 5 个十进制数字如何创建 1001.49。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多