Bluetooth _serial_uu.bufferUntil(byte)做什么?它如何与serialEvent协同工作?

Bluetooth _serial_uu.bufferUntil(byte)做什么?它如何与serialEvent协同工作?,bluetooth,byte,processing,Bluetooth,Byte,Processing,我很难理解这一点。经过搜查,我发现 在调用serialEvent()之前将特定字节设置为缓冲区 这是从处理网站 Serial event是一个函数,如果我没有弄错的话,用户通过输入定义为函数的串行端口来声明 但是我看到了当没有任何东西被发送到串口时,bufferUntil('\n'),那么这是做什么的,在调用serialEvent()之前它意味着什么呢?这是放在设置中的,每次调用函数之前怎么能调用它?我还看到了像lf这样的参数,那么这里发生了什么,它是如何与serialEvent()函数协同工作

我很难理解这一点。经过搜查,我发现

在调用serialEvent()之前将特定字节设置为缓冲区

这是从处理网站

Serial event是一个函数,如果我没有弄错的话,用户通过输入定义为函数的串行端口来声明

但是我看到了当没有任何东西被发送到串口时,
bufferUntil('\n')
,那么这是做什么的,在调用serialEvent()之前它意味着什么呢?这是放在设置中的,每次调用函数之前怎么能调用它?我还看到了像
lf
这样的参数,那么这里发生了什么,它是如何与serialEvent()函数协同工作的呢

谢谢你的帮助,干杯

使用
bufferUntil(lf)
设置串行端口侦听(将数据写入其缓冲区),直到它获得某个字符(lf,在示例中链接的是换行字符)

正如您所注意到的,
bufferUntil(lf)
实际上不会读取任何数据。要读取端口接收到的数据,需要定义一个中断函数,在该函数中调用
readString

void serialEvent(Serial port)
   { inString = port.readString(); } 
一旦串行端口接收到您用
bufferUntil(lf)
定义的字符,就会自动调用此函数(中断程序的正常流程,从而中断其名称);这将一直持续到示例的换行符。从端口缓冲区读取数据后,程序将返回中断的位置

编辑:什么是缓冲区?缓冲区是一个软件(您正在使用的库中隐藏的变量)或硬件(串行端口芯片上的一组内存),用于存储到达端口的数据(这一个是接收缓冲区,但也有一个传输缓冲区,用于存储通过端口发送的信息)

可以将其视为位或字节的存储桶。与水龙头流出的水流类似,如果你想喝一杯水,你可以打开水龙头,在下面放一个玻璃杯。但可能是你想以后再喝你的水,所以你可以放一个水桶(水缓冲剂)为你储存水。在这种情况下,
bufferUntil(lf)
语句将是放置水桶的动作,您可以将
serialEvent
视为从水桶取水的动作(事实上,你正在使用水桶可以让你继续在家里跑腿,但在某个时候,水桶会溢出,除非你关闭水龙头或开始清空水龙头,而要做到这一点,你必须中断你的正常活动)

为什么我们需要缓冲区?好吧,你可以连续轮询(从软件的主要任务中监听端口),但是你的代码会非常低效。有了缓冲区,你可以做其他事情(计算数据、从传感器读取数据等),你只会在确定的情况下检查端口(因为你的例程被中断)当你想要的数据在那里时。在这种情况下,你想要的数据用你在
bufferUntil(lf)
函数中用作参数的字符表示


我希望我没有夸大类比。

对不起,这可能是个不好的问题,但缓冲区是什么?不用担心,没有不好的问题。我已经用新的段落更新了我的答案。我希望现在更清楚一点。好吧!现在我明白了,再问两个问题?1)你需要缓冲区吗()行,如果您没有它,并且数据被发送到缓冲区(我现在可以说这句话,因为我从您那里理解它:)会发生什么?2) 您是否仅在从端口读取数据时才需要此文件,就像您只是发送到端口时不需要此文件一样,对吗?3(额外功能)serialEvent是否检测到什么时候写入了缓冲区,更清楚地说,它只是读取从串行端口获取数据的缓冲区?1)在本例中,您需要使用
缓冲区直到
,否则您将继续在缓冲区中存储数据,但不会发生任何事情(最终,与bucket一样,缓冲区将溢出,您将丢失数据)。使用您正在使用的库,您还可以读取固定数量的字节,而不是直到,如果您以这种方式工作,您不需要使用“BufferTill
.2”进行写写,您可能也有缓冲区,但您不会看到
BufferTill`(这样做是没有意义的,因为你知道你要发送什么)好的,没有bufferUntil,serialEvent就不能工作了吗?再见,非常感谢你在可以做很多其他事情的时候花时间帮助我!