Arduino-串⼝操作函数与⽰例代码⼤全
⽂章⽬录
官⽹地址
Arduino - 串⼝操作函数与⽰例代码⼤全
本⽂总结了Arduino常⽤串⼝操作函数,函数说明部分来源于使⽤指南,⽰例与实验部分为⾃编。本⽂是对Arduino串⼝操作函数的较全⾯总结,可作为⼯具贴查使⽤。
1.串⼝设置
Serial.begin();
说明
开启串⼝,通常置于setup()函数中。
语法
Serial.begin(speed);
Serial.begin(speed,config);
参数
speed: 波特率,⼀般取值300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600,115200
config: 设置数据位、校验位和停⽌位。例如Serial.begin(speed,Serial_8N1); Serial_8N1中:8表⽰8个数据位,N表⽰没有校验,1表⽰有1个停⽌位。
返回
None
⽰例
void setup() {
Serial.begin(9600); // opensserial port, sets data rate to 9600 bps
}
说明
禁⽌串⼝传输函数。此时串⼝传输的pin脚可以作为数字IO脚使⽤。
语法
参数
None
返回
None
2.清空串⼝缓存
Serial.flush();
说明
1.0版本之前为清空串⼝缓存,现在该函数作⽤为等待输出数据传送完毕。如果要清空串⼝缓存的话,可以使⽤:ad()
>= 0)来代替。
语法
Serial.flush ()
参数
None
返回
None
ad()>= 0){}
说明
在此代码之前最好加⼊Serial.flush()语句,使得串⼝数据传输完毕,再进⾏清空。
因ad()函数读取串⼝缓存中的⼀个字符,并删除已读字符。因此可以⽤这句代码来清空串⼝缓存。实验代码详见下⽂代码。
语法
Serial.flush();
ad() >=0){}
参数
None
返回
None
⽰例
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available()) {
int n = Serial.parseInt();
Serial.println(n);
Serial.flush();
while (ad() >= 0) {}
}
}
3.输出串⼝数据
Serial.print();
说明
串⼝输出数据函数,写⼊字符串数据到串⼝。
语法
Serial.print(val)
Serial.print(val,format)
参数
val: 打印的值,任意数据类型
format: 输出的数据格式,包括整数类型和浮点型数据的⼩数点位数。
⽰例
Serial.print(78, BIN) 得到 "1001110"
Serial.print(78, OCT) 得到 "116"
Serial.print(78, DEC) 得到 "78"
Serial.print(78, HEX) 得到 "4E"
Serial.print(1.23456, 0) 得到 "1"
Serial.print(1.23456, 2) 得到 "1.23"
Serial.print(1.23456, 4) 得到 "1.2346"
Serial.print('N') 得到 "N"
Serial.print("Hello world.") 得到 "Hello world."
Serial.println();
说明
写⼊字符串数据,并换⾏。实验代码详见下⽂。
语法
Serial.println(val)
Serial.println(val,format)
参数
val: 打印的值,任意数据类型
format: 输出的数据格式,包括整数类型和浮点型数据的⼩数点位数。
返回
字节
Serial.SerialEvent();
串⼝数据准备好时触发的事件函数,即串⼝数据准备好调⽤该函数。使⽤ad()捕捉到了这个数据。
语法
void serialEvent() {
//statements
}
对于具有附加串⾏端⼝的电路板(请参见):
void serialEvent1() {python怎么读取串口数据
//statements
}
void serialEvent2() {
//statements
}
void serialEvent3() {
//statements
}
⽰例代码:
/ *
Serial事件⽰例
当新的串⾏数据到达时,此草图将其添加到String。
收到换⾏符时,循环打印字符串并清除它。
对此的⼀个很好的测试是尝试使⽤发出
NMEA 0183句⼦的GPS接收器。
注意:Leonardo,Micro或其他基于ATmega32U4的主板上不提供serialEvent()功能。
由Tom Igoe  于2011年5⽉9⽇创建此⽰例代码在公共领域。
/en/Tutorial/SerialEvent
* /
String inputString = "";        //⼀个⽤于保存传⼊数据的字符串
bool stringComplete = false;  //字符串是否完整
void setup () {
// initialize serial:
Serial.begin(9600 );
//为inputString保留200个字节:
inputStringreserve(200);
}
void loop () {
//在换⾏符到达时打印字符串:
if (stringComplete) {
Serial.println( inputString);
//清除字符串:
inputString = “” ;
stringComplete = false ;
}
}
/ *
每当有新的数据进⼊硬件序列RX发⽣的serialEvent。此
例程在每个时间循环()运⾏之间运⾏,因此使⽤内部循环
延迟可以延迟响应。可以使⽤多个字节的数据。
* /
void serialEvent () {
while (Serial.available()) {
//获取新的字节:
char inChar = (ad();
//将它添加到inputString:
inputString + = inChar ;
//如果传⼊的字符是换⾏符,请设置⼀个标志,以便主循环可以
//对它做⼀些事情:
if ( inChar == ' \ n ' ) {
stringComplete = true ;
}
}
}
参数
statements: 任何有效的语句。
注意事项:
serialEvent()不适⽤于Leonardo,Micro或Yún。
serialEvent()与serialEvent1()不适⽤于Arduino SAMD板
serialEvent(),serialEvent1(),serialEvent2(),serialEvent3() 不使⽤Arduino Due。
4.读串⼝缓存区数据
Serial.available();
说明
判断串⼝缓冲器的状态函数,⽤以判断数据是否送达串⼝。注意使⽤时通常⽤delay(100)以保证串⼝字符接收完毕,即保证Serial.available()返回的是缓冲区准确的可读字节数。
语法
Serial.available();
参数
None
返回
返回缓冲区可读字节数⽬
⽰例
void setup() {
Serial.begin(9600);
ad()>= 0){}//clear serialbuffer
}
void loop() {
if (Serial.available() > 0) {
delay(100); // 等待数据传完
int numdata = Serial.available();
Serial.print("Serial.available = :");
Serial.println(numdata);
}
ad()>=0){} //清空串⼝缓存
}
实验结果
说明
读取串⼝数据,⼀次读⼀个字符,读完后删除已读数据。
语法
参数
None
返回
返回串⼝缓存中第⼀个可读字节,当没有可读数据时返回-1,整数类型。
⽰例