进阶之路(基础篇)-019Serial串⼝函数说明送呈
本⽂总结了Arduino常⽤串⼝操作函数,函数说明部分来源于,⽰例与实验部分为⾃编。本⽂是对Arduino串⼝操作函数的较全⾯总结,可作为⼯具贴查找使⽤。
函数:if(Serial)
描述:
指⽰指定的串⾏端⼝是否已就绪。
在32u4基础板,if(Serial)指⽰USB CDC串⾏连接状态是否打开。对于所有其它情况下,如果在Leonardo板上始终返回true(真)。
这是介绍Arduino 1.0.1。
语法:
所有板⼦:if(Serial)
如果是Arduino Leonardo:if(Seriall)
如果是Arduino Mega:if (Serial1) ,if (Serial2) ,if (Serial3)
参数:⽆
返回值:
布尔值(boolean):如果指定的串⾏端⼝可⽤,则返回true。只有在查询Leonardo的USB CDC串⾏连接准备就绪之前,此操作才会返回fal。
范例:
1void tup() {
2//Initialize rial and wait for port to open:
3 Serial.begin(9600);
4while (!Serial) {
5 ; // wait for rial port to connect. Needed for native USB
6 }
7 }
8
9void loop() {
10//proceed normally
11 }
函数:available()
描述:获取可从串⾏端⼝读取的字节数(字符)。这是已经到达并存储在串⾏接收缓冲区(其中包含64个字节)的数据个数。 available()从Stream实⽤程序类继承。
语法:
Serial.available()
只有:Arduino Mega
Serial1.available()
Serial2.available()
Serial3.available()
参数:⽆
返回值:串⼝被使⽤的字节数
通⽤范例:
1int incomingByte = 0; // for incoming rial data
2void tup(){
3 Serial.begin(9600); // opens rial port, ts data rate to 9600 bps
4 }
5void loop(){
6// nd data only when you receive data:
7if (Serial.available() > 0) {
8// read the incoming byte:
9 incomingByte = ad();
10// say what you got:
11 Serial.print("I received: ");
12 Serial.println(incomingByte, DEC);
13 }
14 }
Arduino Mega 范例:
1void tup(){
2 Serial.begin(9600);
3 Seriall.begin(9600);
4 }
5void loop(){
6// read from port 0, nd to port 1:
7if(Serial.available()){
8int inByte = ad();
9 Serial1.print(inByte,BYTE);
10 }
11// read from port 1, nd to port 0:
12if(Serial1.available()){
13int inByte = ad();
14 Serial.print(inByte,BYTE);
15 }
16 }
函数:availableForWrite()
描述:获取可⽤于在串⾏缓冲区中写⼊的字节数(字符),⽽不会阻塞写⼊操作。
语法:
Serial.availableForWrite()
只有:Arduino Mega
Serial1.availableForWrite()
Serial2.availableForWrite()
Serial3.availableForWrite()
参数:⽆
返回值:可写⼊的字节数
资本论的作者范例:⽆
函数:begin()
描述:
设置串⾏数据传输的每秒位数(波特率)的数据速率。对于与计算机进⾏通信,请使⽤以下费率之⼀:
300,600,1200,2400,4800,2600,800,400400,19200,2800800,3400400,57600或115200.然⽽,您可以指定其他费率 - 例如通过引脚0和1与需要特定波特率的组件进⾏通信。
可选的第⼆个参数配置数据,奇偶校验位和停⽌位。默认值为8位数据位,⽆奇偶校验位,1位停⽌位。
语法:
Serial.begin(speed)
Serial.begin(speed, config)
只有Arduino Mega:
Serial1.begin(speed)
Serial2.begin(speed)
Serial3.begin(speed)
Serial1.begin(speed, config)
Serial2.begin(speed, config)
Serial3.begin(speed, config)
参数:
speed:以秒为单位(波特) - long
config: 设置数据,奇偶校验位和停⽌位。有效值为:
1 speed:以秒为单位(波特) - long
2 config: 设置数据,奇偶校验位和停⽌位。有效值为:
3 SERIAL_5N1
4 SERIAL_6N1
5 SERIAL_7N1
6 SERIAL_8N1 (默认值)
7 SERIAL_5N2
8 SERIAL_6N2
9 SERIAL_7N2
10 SERIAL_8N2
11 SERIAL_5E1
12 SERIAL_6E1
13 SERIAL_7E1
14 SERIAL_8E1
汽车电子技术专业
15 SERIAL_5E2
16 SERIAL_6E2
17 SERIAL_7E2
18 SERIAL_8E2
19 SERIAL_5O1
20 SERIAL_6O1
21 SERIAL_7O1
22 SERIAL_8O1
23 SERIAL_5O2
24 SERIAL_6O2
25 SERIAL_7O2
26 SERIAL_8O2
返回值:没有
通⽤范例:
1void tup(){
2 Serial.begin(9600); // opens rial port, ts data rate to 9600 bps
3 }
4void loop(){}
Arduino Mega范例:
1// Arduino Mega using all four of its Serial ports
2// (Serial, Serial1, Serial2, Serial3),
3// with different baud rates:
4void tup(){
5 Serial.begin(9600);
6 Serial1.begin(38400);
7 Serial2.begin(19200);
8 Serial3.begin(4800);
9 Serial.println("Hello Computer");
10 Serial1.println("Hello Serial 1");
11 Serial2.println("Hello Serial 2");
12 Serial3.println("Hello Serial 3");
13 }
14void loop() {}
函数:end()
描述:禁⽤串⾏通信,允许RX和TX引脚⽤于⼀般输⼊和输出。要重新启⽤串⾏通信,请调⽤Serial.begin()。
语法:
d()
只有Arduino Mega:二胡技巧训练秘诀
d()
d()
d()
参数:⽆
返回值:⽆
函数:Serial.find()
描述:Serial.find() 从串⾏缓冲器读取数据,直到找到给定长度的⽬标字符串。如果找到⽬标字符串,该函数返回true,如果超时,返回fal。
语法:Serial.find(target)
参数:target:要搜索的字符串(char)
返回值:(boolean)布尔
函数:Serial.findUntil()
描述:
Serial.findUntil()从串⾏缓冲区读取数据,直到找到给定长度或终⽌符字符串的⽬标字符串。
如果找到⽬标字符串,该函数返回true,如果超时,返回fal。
Serial.findUntil()从Stream实⽤程序类继承。
语法:
Serial.findUntil(target, terminal)
参数:
target:要搜索的字符串(char)
terminal :终端字符串在搜索(char)
返回值:boolean(布尔)
函数:flush()
描述:
等待输出串⾏数据的传输完成。(在Arduino 1.0之前,这相反地删除了任何缓冲的输⼊串⾏数据。)
flush()从Stream实⽤程序类继承。
语法:
Serial.flush()
只有Arduino Mega:政策性金融机构
Serial1.flush()
Serial2.flush()
Serial3.flush()
参数:⽆
返回值:没有
函数:parFloat()
描述:
Serial.parFloat()从串⾏缓冲区返回第⼀个有效的浮点数。不是数字(或减号)的字符被跳过。parFloat()由不是浮点数的第⼀个字符终⽌。
Serial.parFloat()从Stream实⽤程序类继承。
语法:Serial.parFloat()
参数:⽆
返回值:flolt
函数:parInt()
描述:
查找输⼊串⾏流中的下⼀个有效整数。parInt()从Stream实⽤程序类继承。
尤其是:
不是数字或减号的初始字符被跳过;
当没有字符被读取可配置的超时值或读取⾮数字时,解析停⽌;
如果在超时(见Serial.tTimeout())时没有读取有效数字,则返回0;
语法:
Serial.parInt()
Serial.parInt(char skipChar)
只有Arduino Mega:
Serial1.parInt()
Serial2.parInt()
Serial3.parInt()
参数:skipChar:⽤于在搜索中跳过指⽰的字符。例如⽤于跳过数千个分频器。
返回值:long(下⼀个有效整数)
函数:peek()
描述:返回输⼊串⾏数据的下⼀个字节(字符),⽽不从内部串⾏缓冲区中删除它。也就是说,对peek()的连续调⽤将返回相同的字符,下⼀次调⽤read()也是如此。peek()从Stream实⽤程序类继承。
语法:
Serial.peek()
只有Arduino Mega:
Serial1.peek()
Serial2.peek()
Serial3.peek()
参数:⽆
返回值:输⼊串⾏数据的第⼀个字节可⽤(如果没有数据可⽤,则为-1) - int
函数:print()
国际工人运动描述:
将数据作为⼈造可读的ASCII⽂本打印到串⾏端⼝。此命令可以有多种形式。使⽤每个数字的ASCII字符打印数字。浮点类似地打印为ASCII数字,默认为两位⼩数。字节作为单个字符发送。字符和字符串按原样发送。例如:
Serial.print(78) gives "78"
Serial.print(1.23456) gives "1.23"
Serial.print('N') gives "N"
Serial.print("Hello world.") gives "Hello world."
可选的第⼆个参数指定要使⽤的基础(格式); 允许的值为BIN(⼆进制或基数2),OCT(⼋进制或基数8),DEC(⼗进制或⼗进制),⼗六进制或⼗六进制。对于浮点数,该参数指定要使⽤的⼩数位数。例如:
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()。例如:
Serial.print(F(“Hello World”))
要发送⼀个字节,请使⽤Serial.write()。
语法:
Serial.print(val)
Serial.print(val, format)
参数:
val:要打印的值 - 任何数据类型
format:指定基数(⽤于整数数据类型)或⼩数位数(⽤于浮点类型)
返回值:size_t(long):print()返回写⼊的字节数,通过读取该数字是可选的
范例:
1/*
2Us a FOR loop for data and prints a number in various formats.
3*/
4int x = 0; // variable
5void tup(){
6 Serial.begin(9600); // open the rial port at 9600 bps:
7 }
8void loop(){
9// print labels
10 Serial.print("NO FORMAT"); // prints a label
11 Serial.print("\t"); // prints a tab
边城翠翠12 Serial.print("DEC");
13 Serial.print("\t");
14 Serial.print("HEX");
15 Serial.print("\t");
16 Serial.print("OCT");
17 Serial.print("\t");
18 Serial.print("BIN");
19 Serial.print("\t");
20for(x=0; x< 64; x++){ // only part of the ASCII chart, change to suit
21// print it out in many formats:
22 Serial.print(x); // print as an ASCII-encoded decimal - same as "DEC"
23 Serial.print("\t"); // prints a tab
24 Serial.print(x, DEC); // print as an ASCII-encoded decimal
25 Serial.print("\t"); // prints a tab
26 Serial.print(x, HEX); // print as an ASCII-encoded hexadecimal
27 Serial.print("\t"); // prints a tab
28 Serial.print(x, OCT); // print as an ASCII-encoded octal
29 Serial.print("\t"); // prints a tab
30 Serial.println(x, BIN); // print as an ASCII-encoded binary
31//then adds the carriage return with "println"
32 delay(200); // delay 200 milliconds
33 }
34 Serial.println(""); // prints another carriage return
35 }
从版本1.0开始,串⾏传输是异步的; 在发送任何字符之前,Serial.print()将返回。
函数:println()
描述:将数据作为⼈造可读的ASCII⽂本,后跟⼀个回车字符(ASCII 13或'\ r')和换⾏符(ASCII 10或'\ n')打印到串⾏端⼝。此命令采⽤与Serial.print()相同的形式。
语法:
Serial.println(val)
Serial.println(val, format)
参数:
val:要打印的值 - 任何数据类型
format:指定基数(⽤于整数数据类型)或⼩数位数(⽤于浮点类型)
返回值:size_t(long):print()返回写⼊的字节数,通过读取该数字是可选的
范例:
1/*
2 Analog input
3 reads an analog input on analog in 0, prints the value out.
4 created 24 March 2006
5 by Tom Igoe
6*/
7int analogValue = 0; // variable to hold the analog value
8void tup(){
9// open the rial port at 9600 bps:
10 Serial.begin(9600);
11 }
12void loop() {
13// read the analog input on pin 0:
14 analogValue = analogRead(0);
15// print it out in many formats:
16 Serial.println(analogValue); // print as an ASCII-encoded decimal
17 Serial.println(analogValue, DEC); // print as an ASCII-encoded decimal
18 Serial.println(analogValue, HEX); // print as an ASCII-encoded hexadecimal
19 Serial.println(analogValue, OCT); // print as an ASCII-encoded octal
20 Serial.println(analogValue, BIN); // print as an ASCII-encoded binary
21// delay 10 milliconds before the next reading:
22 delay(10);
23 }
函数:read()
描述:读取输⼊的串⾏数据。read()从Stream实⽤程序类继承。
语法:
ad()
只有Arduino Mega:
ad()
ad()
屠龙之技 ad()
参数:⽆
返回值:输⼊串⾏数据的第⼀个字节可⽤(如果没有数据可⽤,则为-1) - int
范例:
1int incomingByte = 0; // for incoming rial data
2void tup(){
3 Serial.begin(9600); // opens rial port, ts data rate to 9600 bps
4 }