我很难理解这一点。搜索后我发现
设置要缓冲的特定字节,直到调用serialEvent()为止
这是来自处理网站的this link
串行事件是一种功能,如果我没有记错的话,用户可以通过输入定义为该功能的串行端口来声明。
但是我看到bufferUntil(‘\n’)
当什么都没有发送到Serial时,这是怎么做的?在调用serialEvent()之前,这是什么意思?将其放入安装程序中,每次在函数之前如何调用它?而且我也看到过类似lf
这样的参数,所以这里发生了什么,以及它如何与serialEvent()函数协同作用?
感谢您的帮助,干杯!
最佳答案
使用bufferUntil(lf)
,您可以设置串行端口以侦听(将数据写入其缓冲区),直到获得某个字符(lf,在所链接的示例中为换行字符)为止。
如您所见,bufferUntil(lf)
实际上不会读取任何数据。要读取端口接收的数据,您需要在调用readString
的地方定义一个中断函数:
void serialEvent(Serial port)
{ inString = port.readString(); }
串口接收到您使用
bufferUntil(lf)
定义的字符后,将自动调用此函数(中断程序的正常流及其名称)。直到示例的换行符为止。从端口缓冲区读取数据后,您的程序将返回到被中断的任何地方。编辑:什么是缓冲区?缓冲区可以是软件(存储在所使用的库中的变量)或硬件(串行端口芯片上的一堆内存),用于存储进入端口的数据(这是接收缓冲区,但是还有一个用于通过端口发送信息的传输缓冲区)。
可以将其视为位或字节的存储桶。打个比方,从水龙头流出的水,如果您想喝杯水,可以打开水龙头并在其下放一个玻璃杯。但这可能是您以后要喝水,因此您可以放置一个水桶(水缓冲器)为您储水。在这种情况下,
bufferUntil(lf)
语句将是放置水桶的动作,您可以将serialEvent
视为从水桶中取水的动作(使用水桶这一事实使您可以继续做会在房子周围出事,但在某个时候铲斗会溢出,除非您关闭水龙头或开始清空水龙头,否则必须中断正常的活动流程。为什么需要缓冲区?好吧,您可能会不断轮询(从软件的主要任务监听端口),但是这样您的代码将效率很低。使用缓冲区,您可以做其他事情(计算东西,从传感器读取数据等),并且只有在确定(因为例程被中断)想要的数据在那里时,才检查端口。在这种情况下,所需的数据将用在
bufferUntil(lf)
函数中用作参数的字符表示。我希望我不要过度强调类比。
关于bluetooth - _serial_.bufferUntil(byte)的作用是什么,它如何与serialEvent协同工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56728127/