Arduino基于Stream.h来处理Stream数据的相关库
Posted perseverance52
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Arduino基于Stream.h来处理Stream数据的相关库相关的知识,希望对你有一定的参考价值。
Arduino基于Stream.h来处理Stream数据的相关库
当我们使用ESP8266开发板或者Arduino开发板来开发项目时,可以使用基于Stream类的库来处理Stream数据。以下列表中的库都是基于Stream类所建立的。
Stream.h里面的相关函数
available
:等待读取的数据字节数。返回值数据类型:int
Serial.available()
wifiClient.available()
read
:函数可用于从设备接收到数据中读取一个字节的数据。
Serial.read()
wifiClient.read()
readBytes
函数可用于从设备接收的数据中读取信息。读取到的数据信息将存放在缓存变量中。该函数在读取到指定字节数的信息或者达到设定时间后都会停止函数执行并返回。该设定时间可使用setTimeout来设置。
Serial.readBytes(buffer, length)
wifiClient.readBytes(buffer, length)
readBytesUntil(,,)
:函数可用于从设备接收到数据中读取信息。读取到的数据信息将存放在缓存变量中。该函数在满足以下任一条件后都会停止函数执行并且返回。
Serial.readBytesUntil(character, buffer, length)
wifiClient.readBytesUntil(character, buffer, length)
//character: 终止字符。用于设置终止函数执行的字符信息。设备在读取数据时一旦读取到此终止字符,将会结束函数执行。允许使用char类型。
//buffer: 缓存变量/数组。用于存储读取到的信息。允许使用char或者byte类型的变量或数组。
//length: 读取字节数量。readBytes函数在读取到length所指定的字节数量后就会停止运行。允许使用int类型。
readString
:函数将读取stream
中的字符并存储到字符中。
Serial.readString()
wifiClient.readString()
readStringUntil
:函数可用于从设备接收到的数据中读取信息。读取到的数据信息将以字符串形式返回。该函数在满足以下任一条件后都会停止函数执行并返回。
Serial.readStringUntil(terminator)
wifiClient.readStringUntil(terminator)
find
:函数可用于从设备接收到的数据中寻找指定字符串信息。当函数找到了指定字符串信息后将会立即结束函数执行并且返回“真”。否则将会返回“假”。
Serial.find(target)
wifiClient.find(target)
findUntil
:函数可用于从设备接收到的数据中寻找指定字符串信息。当函数找到了指定字符串信息后将会立即结束函数执行并且返回“真”。否则将会返回“假”。该函数在满足以下任一条件后都会停止函数执行
Serial.findUntil(target, terminator)
wifiClient.findUntil(target, terminator)
// target--读取到指定终止字符串
// terminator--找到了指定字符串信息
// 相关设定函数,达到设定时间(可使用setTimeout来设置)
peek
: 函数可用于从设备接收到的数据中读取一个字节的数据。但是与read函数不同的是,使用peek
函数读取数据后,被读取的数据不会从数据流中消除。这就导致每一次调用peek
函数,只能读取数据流中的第一个字符。然而每一次调用read
函数读取数据时,被读取的数据都会从数据流中删除。
Serial.peek()
wifiClient.peek()
flush
:函数可让开发板在所有待发数据发送完毕前,保持等待状态。(列队等待)
Serial.flush()
wifiClient.flush()
parseInt
:函数可用于从设备接收到的数据中寻找整数数值。
Serial.parseInt()
wifiClient.parseInt()
parseFloat
:函数可用于从设备接收到的数据中寻找浮点数值。
Serial.parseFloat()
wifiClient.parseFloat()
setTimeout
:函数用于设置设备等待数据流的最大时间间隔。
Serial.setTimeout(time)
wifiClient.setTimeout(time)
- 清除接收缓存
举例;
available()
函数可用于检查设备是否接收到数据。该函数将会返回等待读取的数据字节数。
available()
函数属于Stream
类。该函数可被Stream
类的子类所使用,如(Serial
,WiFiClient
,File
等)。
void setup() {
// 启动串口通讯
Serial.begin(115200);
Serial.println();
}
void loop() {
if (Serial.available()){ // 当串口接收到信息后
Serial.println("Serial Data Available..."); // 通过串口监视器通知用户
String serialData = Serial.readString(); // 将接收到的信息使用readString()存储于serialData变量
Serial.print("Received Serial Data: "); // 然后通过串口监视器输出serialData变量内容
Serial.println(serialData); // 以便查看serialData变量的信息
}
}
清除缓存
void setup() {
Serial.begin(115200);
}
void loop() {
// 以下while循环语句将会清除接收缓存内容。
// 具体工作原理是这样的。每当有数据输入接收缓存后,
// 我们可以使用Serial.read()来读取接收缓存中的内容。
// 这时,如果我们对Serial.read()函数的返回值不加以任何利用
// 那么读取到的数据,也就是Serial.read()函数的返回值将会在
// 下一次执行Serial.read时所抛弃。利用while循环语句,我们可以
// 保证在接收缓存中有数据的时候,反复将串口接收缓存中的信息读取并抛弃。
// 从而达到清除接收缓存的目的。
while(Serial.available()){
Serial.println("Clearing Serial Incoming Buffer.");
Serial.read();
}
// 当接收缓存为空时,Serial.read返回值为“-1”
// 通过以下语句我们将看到无论我们是否通过串口监视器
// 输入信息,开发板的串口监视器会一直输出:
// "Incoming Buffer is Clear."
// 这是因为接收缓存中的信息被以上while语句中的内容给清除掉了。
if (Serial.read() == -1){
Serial.println("Incoming Buffer is Clear.");
}
}
以上是关于Arduino基于Stream.h来处理Stream数据的相关库的主要内容,如果未能解决你的问题,请参考以下文章
Esp8266学习4. 基于Arduino的PWM与红外信号处理
Esp8266学习4. 基于Arduino的PWM与红外信号处理
Esp8266学习4. 基于Arduino的PWM与红外信号处理