【发布时间】:2013-10-10 10:53:50
【问题描述】:
我正在高频采样,需要通过 UART 将 10 位 ADC 值从我的 Arduino 中传输出去。
默认情况下,每个字符使用一个字节。因此,如果执行模拟读取会产生“612”的值,它将通过 UART 发送“6”作为一个字节,“1”作为一个字节,“2”作为一个字节,行终止符作为最后一个字节。
鉴于我的采样率被这种通信截断,重要的是它尽可能高效和统一,所以我试图强制它使用两个字节来传输该数据,不是不管实际的数据是什么(默认情况下,它会使用三个字节来传输“23”,四个字节来传输“883”,五个字节来传输“1001”)。
目前,我正在做这样的事情,这是我发现的最好方法:
int a = 600; //Just an example
char high = (char)highByte(a);
char low = (char)lowByte(a);
Serial.print(high);
Serial.println(low);
目前,无论值如何,它都使用三个字节(包括 \n)。有没有更有效的方法?
只是用类似的东西打印出来
Serial.print(foo, BIN);
根本不起作用。实际上,它对 foo 的二进制表示的每一位都使用一个字节,这很愚蠢。
【问题讨论】:
-
根本不发送换行符?如果您知道数据始终是一对字节,并且不担心丢失一个字节(您可以很少在流中传播同步字节),那么就没有理由使用换行符。此外,如果您以二进制形式发送数据,如果其中一个字节恰好是
10(与 ASCII 换行符相同)会发生什么? -
Serial.write() 是处理二进制数据的方式。 Serial.print() 函数旨在将值转换为人类可读的文本。
标签: c serial-port char arduino uart