Arduino的读函数功能和时间花费(串口通信必知):
(1) Serial.read(): 每次只读取一个字节(or 一个字母),但是单次读取时间很快;
(2)Serial.readString(): 每次读取一个字符串,程序不知道什么时候能够读取完整的字符串,会默认系统等待1s的时间,这个时间对于及时响应的系统来说实在是太漫长了,所以有了下面这个;
(3) Serial.readStringUntil(): 每次读取一个字符串,知道遇到截至字符,比如:Serial.readStringUntil(','):程序遇到逗号就不读取串口中的内容了,系统也不会等待,所以你只需要把你要传达的命令放在逗号之前就可以了,相当于给系统一个明确的提示,花费的时间与read()不相上下,但是又能成功读取到字符串,字符串的读取对于一个程序操作来说,在某些情境下是至关重要和方便的。但是如果不想用这个函数,也可以set一下系统的等待时间 Serial.setTimeout(time),把要设置的时间填到括号中即可,但是不建议使用这种方法,这种方法并没有给程序增加多少效率,反而使得整个系统处于一种被束缚的状态;
(4) Serial.parseInt(): 可以将字符串中遇到的第一个int型的数据抓取下来,比如我有一个字符串:“www.123_456.com”,该函数会抓取到123。但是这个函数的反应时间在某些情况下也是很慢,可能等待的时间也是1s,比如我有一个字符串“www.123”,同样程序也能抓取到123,但是在123之后没有非数字的字符,所以程序需要等待1s中确认后面再也没有整型的数据了。所以这个时候如果你要发送含有整型数据的命令的时候,可以把命令改成"www.123.",只要数字后面加上一个任意非数字的字符就ok了,这个时候程序就会在“.”之前截至,反应时间也是“及时”的。
字符串缓存(串口通信必知):
假设我们有一个字符串“www.123.com”,如果使用函数 Serial.read(),那么程序会读取到“w”,这个时候串口中的缓存变成了“ww.123.com”,假设我们有一个字符串“www.123.com”,如果我们使用了函数 Serial.parseInt(),那么之后字符串中的缓存变成了 ".com",对于串口通信编程来说,知道串口缓存以及各个函数对串口缓存的影响是至关重要的,其他关于串口操作的函数,可以依次类推,自己加以实验,用类似的办法总能解决现实需求(比如时间效率,特定命令等等)。