Arduino的串口有两类发送的函数Serial.print()类和Serial.write()类,前者以Ascii码的形式将要发送的内容编码发送,所以我们最后接收并看到的是一个一个的ASCII码组合而成的数据,本质上成了字符串;后者则以字节形式直接发送原始数据,所以我们在串口接收工具看到的数据是乱码,它们在计算机中就是这样存储的。
有些时候,我们可能会自己定义数据结构,比如结构体类型的数据。结构体由一些基本的数据类型组合而成,用户可以自由添加和安排其内容,但是在自己实验和查阅资料了解到,在单片机中和在电脑中定义的结构体有一些区别。我们以下面的结构体为例。
typedef struct sdata
{
char c;
int16_t i;
float f;
}sdata;
如果按照Arduino的数据类型大小来算,为1+2+4=7,通过sizeof(sdata)验证后也为7;而如果这个结构体定义在linux操作系统下,用sizeof(sdata)算出来的结果为8,这涉及到计算机地址对齐的问题,具体请参考文章:http://blog.sina.com.cn/s/blog_5f77c7270100dnoy.html。知道了上面的问题,我们设计结构体就要注意,不同的数据类型顺序可能会导致不同的结构体大小,而我们在单片机如Arduino设计结构体时也要考虑对齐问题,比如将上面例子的char定义为二维数组char c[2],或者把char放到最后,这样即使我们接收时弄错了结构体大小,接到的数据也能够准确的放到结构体中。
在Arduino中,print函数和write函数都无法直接