我一直在阅读几个主题,但我仍然不确定如何实现这一目标 . 我正在使用analogRead()读取Arduino中的一些值,所以我得到的值在0-1023之间,我通过Serial Communiaction将它们发送到Matlab . 我目前正在使用Serial.print(),但我已经读过它是一种使用Serial.write()的更有效的方法:首先将值打包成位,然后只发送MSB和LSB . 这样,与使用Serial.print的情况相比,我将使用更少的位来发送一个值 .
问题是我不知道如何在Arduino中打包值(0-1023)来发送MSB和LSB,然后在MATLAB中解压缩它们以再次定义整数值 .
Coud你能帮个忙吗?
提前致谢
1 回答
首先在Arduino上的C / C中,您可以通过bit shifting和bit masking的bitwise operations获得最高有效位(MSB)或最低有效位(LSB):
但是,作为Arduino的Arduino具有以下功能:highByte和lowByte分别返回值的MSB和LSB .
我真的不能说使用
Serial.Write
对你来说会更快 . 如果您're sending lots of data to Matlab, it'最好将呼叫数量限制为Serial.Write
或Serial.Print
. 您可以通过创建缓冲区(字节数组),将所有数据粘贴到其中,然后将上部传递给Serial.Write
(请参阅此函数的重载版本的文档)来完成此操作 .在Matlab方面,有相同的bitwise functions,只是不要指望它们与它们的C对应物一样有效 . 它们对于测试原型非常有用 . 例如,您可以在Matlab中重现以上C代码:
您通过反转逐位操作来“重组”您的双字节值:
在C中,这只是
(MSB<<8)|LSB
,您可以在Matlab中更有效地实现上述内容: