新闻  |   论坛  |   博客  |   在线研讨会
Arduino esp8266系列教程三----串口的常用函数
Linux嵌入式 | 2023-01-03 13:20:15    阅读:900   发布文章

常用函数1.Serial.begin(speed)

打开串口

参数:

speed :波特率

2.Serial.available()

获取串口上可读取的数据的字节数。该数据是指已经到达并存储在接收缓存(共有64字节)中。available()继承自Stream实用类。

语法:

Serial.available()

参数:

返回值:

返回可读取的字节数

示例:

int incomingByte = 0; // for incoming serial data

void setup() {

Serial.begin(9600); // opens serial port, sets data rate to 9600 bps

}

void loop() {

// send data only when you receive data:

if (Serial.available() > 0) {

// read the incoming byte:

incomingByte = Serial.read();

// say what you got:

Serial.print("I received: ");

Serial.println(incomingByte, DEC);

}

}

3.Serial.read()

读串口数据,read()继承自Stream实用类。 语法:

Serial.read()

参数:

返回值:

串口上第一个可读取的字节(如果没有可读取的数据则返回-1)- int型。

示例:

int incomingByte = 0;   // 用于存储从串口读到的数据 void setup() {
        Serial.begin(9600);     // 打开串吕,设置速率为9600 bps}
 void loop() {
 
        // 只在收到数据时发送数据        if (Serial.available() > 0) {
                // 读取传入的字节                incomingByte = Serial.read();
 
                // 指示你收到的数据                Serial.print("I received: ");
                Serial.println(incomingByte, DEC);
        }
}
4.Serial.flush()

刷新串口数据,等待串口数据完成输出。

5.Serial.print()

往串口发数据,无换行 描述

以人类可读的ASCII码形式向串口发送数据,该函数有多种格式。整数的每一数位将以ASCII码形式发送。浮点数同样以ASCII码形式发送,默认保留小数点后两位。字节型数据将以单个字符形式发送。字符和字符串会以其相应的形式发送。例如:

Serial.print(78) 发送 "78"

Serial.print(1.23456) 发送 "1.23"

Serial.print('N') 发送 "N"

Serial.print("Hello world.") 发送 "Hello world."

可选的第二个参数用于指定数据的格式。允许的值为:BIN (binary二进制), OCT (octal八进制), DEC (decimal十进制), HEX (hexadecimal十六进制)。对于浮点数,该参数指定小数点的位数。例如:

Serial.print(78, BIN) gives "1001110"

Serial.print(78, OCT) gives "116"

Serial.print(78, DEC) gives "78"

Serial.print(78, HEX) gives "4E"

Serial.println(1.23456, 0) gives "1"

Serial.println(1.23456, 2) gives "1.23"

Serial.println(1.23456, 4) gives "1.2346"

你可以用F()把待发送的字符串包装到flash存储器。例如:

Serial.print(F(“Hello World”))

要发送单个字节数据,请使用Serial.write()。

添加 F() 相当于为字符串常量定义了PROGMEM属性,常量字符串仍然存储在FLASH中,但是程序运行时不会再将常量字符串从FLASH中copy到SRAM中,而是直接读取FLASH中的字符串,这样一来就节约了SRAM,但是代码运行速度就下降了。

语法:

Serial.print(val)

Serial.print(val, format)

参数:

val: 要发送的数据(任何数据类型)

format: 指定数字的基数(用于整型数)或者小数的位数(用于浮点数)。

返回值:

size_t (long): print()返回发送的字节数(可丢弃该返回值)。

示例:

/*

Uses a FOR loop for data and prints a number in various formats.

*/

int x = 0; // variable

void setup() {

Serial.begin(9600); // open the serial port at 9600 bps:

}

void loop() {

// print labels

Serial.print("NO FORMAT"); // prints a label

Serial.print("\t"); // prints a tab

Serial.print("DEC");

Serial.print("\t");

Serial.print("HEX");

Serial.print("\t");

Serial.print("OCT");

Serial.print("\t");

Serial.print("BIN");

Serial.print("\t");

for(x=0; x< 64; x++){ // only part of the ASCII chart, change to suit

// print it out in many formats:

Serial.print(x); // print as an ASCII-encoded decimal - same as "DEC"

Serial.print("\t"); // prints a tab

Serial.print(x, DEC); // print as an ASCII-encoded decimal

Serial.print("\t"); // prints a tab

Serial.print(x, HEX); // print as an ASCII-encoded hexadecimal

Serial.print("\t"); // prints a tab

Serial.print(x, OCT); // print as an ASCII-encoded octal

Serial.print("\t"); // prints a tab

Serial.println(x, BIN); // print as an ASCII-encoded binary

// then adds the carriage return with "println"

delay(200); // delay 200 milliseconds

}

Serial.println(""); // prints another carriage return

}

6.Serial.println()

往串口发数据,类似Serial.print(),但有换行。

7.Serial.write()

写二进制数据到串口,数据是一个字节一个字节地发送的,若以字符形式发送数字请使用print()代替。

语法:

Serial.write(val)

Serial.write(str)

Serial.write(buf, len)

参数:

val: 作为单个字节发送的数据

str: 由一系列字节组成的字符串

buf: 同一系列字节组成的数组

len: 要发送的数组的长度

返回:

write()会返回发送的字节数,所以读取该返回值是可选的。

示例:

void setup(){

Serial.begin(9600);

}

void loop(){

Serial.write(45); //以二进制形式发送数字45

int bytesSent = Serial.write(“hello”); //发送字符串“hello” 并返回该字符串的长度。

}

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
工科男,多年嵌入式工作者,每日分享工作中常遇到的一些“坑”
推荐文章
最近访客