1、串口設(shè)置
Serial.begin();
說明
開啟串口,通常置于setup()函數(shù)中。
語法
Serial.begin(speed);
Serial.begin(speed,config);
speed: 波特率,一般取值300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600,115200
config: 設(shè)置數(shù)據(jù)位、校驗位和停止位。例如Serial.begin(speed,Serial_8N1); Serial_8N1中:8表示8個數(shù)據(jù)位,N表示沒有校驗,1表示有1個停止位。
返回
None
示例
[cpp] view plain copy
void setup() {
Serial.begin(9600); // opensserial port, sets data rate to 9600 bps
}
Serial.end();
說明
禁止串口傳輸函數(shù)。此時串口傳輸?shù)?a href="http://www.nxhydt.com/tags/pi/" target="_blank">pin腳可以作為數(shù)字IO腳使用。
語法
Serial.end()
參數(shù)
None
返回
None
2、清空串口緩存
Serial.flush();
說明
1.0版本之前為清空串口緩存,現(xiàn)在該函數(shù)作用為等待輸出數(shù)據(jù)傳送完畢。如果要清空串口緩存的話,可以使用:while(Serial.read() 》= 0)來代替。
語法
Serial.flush ()
參數(shù)
None
返回
None
while(Serial.read()》= 0){}
說明
因Serial.read()函數(shù)讀取串口緩存中的一個字符,并刪除已讀字符。因此可以用這句代碼來清空串口緩存。實驗代碼詳見下文代碼。
語法
while(Serial.read() 》=0){}
參數(shù)
None
返回
None
3、輸出串口數(shù)據(jù)
將打印輸出串口數(shù)據(jù)的函數(shù)在這一小節(jié)給出,方便大家閱讀后面的各個示例代碼。
Serial.print();
說明
串口輸出數(shù)據(jù)函數(shù),寫入字符串?dāng)?shù)據(jù)到串口。
語法
Serial.print(val)
Serial.print(val,format)
參數(shù)
val: 打印的值,任意數(shù)據(jù)類型
format: 輸出的數(shù)據(jù)格式,包括整數(shù)類型和浮點型數(shù)據(jù)的小數(shù)點位數(shù)。
示例
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();
說明
寫入字符串?dāng)?shù)據(jù),并換行。實驗代碼詳見下文。
語法
Serial.println(val)
Serial.println(val,format)
參數(shù)
val: 打印的值,任意數(shù)據(jù)類型
format: 輸出的數(shù)據(jù)格式,包括整數(shù)類型和浮點型數(shù)據(jù)的小數(shù)點位數(shù)。
返回
字節(jié)
Serial.SerialEvent();
串口數(shù)據(jù)準(zhǔn)備好時觸發(fā)的事件函數(shù),即串口數(shù)據(jù)準(zhǔn)備好調(diào)用該函數(shù)。
語法
Serial.serialEvent{//statements}
參數(shù)
statements: 任何有效的語句。
4、讀串口緩存區(qū)數(shù)據(jù)
Serial.available();
說明
判斷串口緩沖器的狀態(tài)函數(shù),用以判斷數(shù)據(jù)是否送達(dá)串口。注意使用時通常用delay(100)以保證串口字符接收完畢,即保證Serial.available()返回的是緩沖區(qū)準(zhǔn)確的可讀字節(jié)數(shù)。
語法
Serial.available();
參數(shù)
None
返回
返回緩沖區(qū)可讀字節(jié)數(shù)目
示例
[cpp] view plain copy
void setup() {
Serial.begin(9600);
while(Serial.read()》= 0){}//clear serialbuffer
}
void loop() {
if (Serial.available() 》 0) {
delay(100); // 等待數(shù)據(jù)傳完
int numdata = Serial.available();
Serial.print(“Serial.available = :”);
Serial.println(numdata);
}
while(Serial.read()》=0){} //清空串口緩存
}
實驗結(jié)果
Serial.read();
說明
讀取串口數(shù)據(jù),一次讀一個字符,讀完后刪除已讀數(shù)據(jù)。
語法
Serial.read();
參數(shù)
None
返回
返回串口緩存中第一個可讀字節(jié),當(dāng)沒有可讀數(shù)據(jù)時返回-1,整數(shù)類型。
示例
[cpp] view plain copy
char comchar;
void setup() {
Serial.begin(9600);
while(Serial.read()》= 0){}/ /clear serialbuffer
}
void loop() {
// read data from serial port
while(Serial.available()》0){
comchar = Serial.read();//讀串口第一個字節(jié)
Serial.print(“Serial.read: ”);
Serial.println(comchar);
delay(100);
}
}
實驗結(jié)果
從實驗結(jié)果可以看出:Serial.read()每次從串口緩存中讀取第一個字符,并將讀過的字符刪除。
Serial.peek();
說明
讀串口緩存中下一字節(jié)的數(shù)據(jù)(字符型),但不從內(nèi)部緩存中刪除該數(shù)據(jù)。也就是說,連續(xù)的調(diào)用peek()將返回同一個字符。而調(diào)用read()則會返回下一個字符。
語法
Serial.peek();
參數(shù)
None
返回
返回串口緩存中下一字節(jié)(字符)的數(shù)據(jù),如果沒有返回-1,整數(shù)int型
示例
[cpp] view plain copy
char comchar;
void setup() {
Serial.begin(9600);
while(Serial.read()》= 0){}//clear serialbuffer
}
void loop() {
// read data from serial port
while(Serial.available()》0){
comchar = Serial.peek();
Serial.print(“Serial.peek: ”);
Serial.println(comchar);
delay(100);
}
}
實驗結(jié)果
從實驗結(jié)果可以看出:Serial.peek()每次從串口緩存中讀取一個字符,并不會將讀過的字符刪除。第二次讀取時仍然為同一個字符。
Serial.readBytes(buffer,length);
說明
從串口讀取指定長度length的字符到緩存數(shù)組buffer。
語法
Serial.readBytes(buffer,length);
參數(shù)
buffer: 緩存變量
length:設(shè)定的讀取長度
返回
返回存入緩存的字符數(shù),0表示沒有有效數(shù)據(jù)。
示例
[cpp] view plain copy
char buffer[18];
int numdata=0;
void setup() {
Serial.begin(9600);
while(Serial.read()》= 0){}//clear serial port
}
void loop() {
// read data from serial port
if(Serial.available()》0){
delay(100);
numdata = Serial.readBytes(buffer,3);
Serial.print(“Serial.readBytes:”);
Serial.println(buffer);
}
// clear serial buffer
while(Serial.read() 》= 0){}
for(int i=0; i《18; i++){
buffer[i]=‘\0’;
}
}
實驗結(jié)果
從串口緩存讀取指定長度為3的字節(jié)。
Serial.readBytesUntil(character,buffer,length);
說明
從串口緩存讀取指定長度的字符到數(shù)組buffer,遇到終止字符character后停止。
語法
Serial.readBytesUntil(character ,buffer,length);
參數(shù)
character : 查找的字符 (char)
buffer: 存儲讀取數(shù)據(jù)的緩存(char[] 或byte[])
length:設(shè)定的讀取長度
返回
返回存入緩存的字符數(shù),0表示沒有有效數(shù)據(jù)。
示例
[cpp] view plain copy
char buffer[18];
char character = ‘,’; //終止字符
int numdata=0;
void setup() {
Serial.begin(9600);
while(Serial.read()》= 0){}//clear serialport
}
void loop() {
// read data from serial port
if(Serial.available()》0){
delay(100);
numdata =Serial.readBytesUntil(character,buffer,3);
Serial.print(“Serial.readBytes:”);
Serial.println(buffer);
}
// clear serial buffer
while(Serial.read() 》= 0){}
for(int i=0; i《18; i++){
buffer[i]=‘\0’;
}
}
實驗結(jié)果
從串口緩存中讀取3個字符,當(dāng)遇到“,”時終止讀取。
Serial.readString();
說明
從串口緩存區(qū)讀取全部數(shù)據(jù)到一個字符串型變量。
語法
Serial.readString();
參數(shù)
None
返回
返回從串口緩存區(qū)中讀取的一個字符串。
示例
[cpp] view plain copy
String comdata = “”;
void setup() {
Serial.begin(9600);
while(Serial.read()》= 0){} //clear serialbuffer
}
void loop() {
// read data from serial port
if(Serial.available()》0){
delay(100);
comdata = Serial.readString();
Serial.print(“Serial.readString:”);
Serial.println(comdata);
}
comdata = “”;
}
實驗結(jié)果
從實驗結(jié)果可以看出:Serial.readString()從串口緩存中讀取字符至字符串。
Serial.readStringUntil();
說明
從串口緩存區(qū)讀取字符到一個字符串型變量,直至讀完或遇到某終止字符。
語法
Serial.readStringUntil(terminator)
參數(shù)
terminator:終止字符(cha型)
返回
從串口緩存區(qū)中讀取的整個字符串,直至檢測到終止字符。
示例
[cpp] view plain copy
String comdata = “”;
char terminator = ‘,’;
void setup() {
Serial.begin(9600);
while(Serial.read()》= 0){} //clear serialbuffer
}
void loop() {
// read data from serial port
if(Serial.available()》0){
delay(100);
comdata =Serial.readStringUntil(terminator);
Serial.print(“Serial.readStringUntil: ”);
Serial.println(comdata);
}
while(Serial.read()》= 0){}
}
實驗結(jié)果
從串口讀取所有字符存放于字符串comdata,直至遇到字符“,”時終止讀取。
Serial.parseFloat();
說明
讀串口緩存區(qū)第一個有效的浮點型數(shù)據(jù),數(shù)字將被跳過。當(dāng)讀到第一個非浮點數(shù)時函數(shù)結(jié)束。
語法
Serial.parseFloat()
參數(shù)
None
返回
返回串口緩存區(qū)第一個有效的浮點型數(shù)據(jù),數(shù)字將被跳過。
示例
[cpp] view plain copy
float comfloat;
void setup() {
Serial.begin(9600);
while(Serial.read()》= 0){}//clear serialbuffer
}
void loop() {
// read data from serial port
if(Serial.available()》0){
delay(100);
comfloat = Serial.parseFloat();
Serial.print(“Serial.parseFloat:”);
Serial.println(comfloat);
}
// clear serial buffer
while(Serial.read() 》= 0){}
}
實驗結(jié)果
從實驗結(jié)果可以看出:Serial. parseFloat()從串口緩存中讀取第一個有效的浮點數(shù),第一個有效數(shù)字之前的負(fù)號也將被讀取,獨立的負(fù)號將被舍棄。
Serial.parseInt()
說明
從串口接收數(shù)據(jù)流中讀取第一個有效整數(shù)(包括負(fù)數(shù))。
注意:
非數(shù)字的首字符或者負(fù)號將被跳過
當(dāng)可配置的超時值沒有讀到有效字符時,或者讀不到有效整數(shù)時,分析停止
如果超時且讀不到有效整數(shù)時,返回0
語法
Serial.parseInt()
Serial.parseInt(charskipChar)
參數(shù)
skipChar用于在搜索中跳過指定字符(此用法未知)
返回
返回下一個有效整型值。
示例
[cpp] view plain copy
int comInt;
voidsetup() {
Serial.begin(9600);
while(Serial.read()》= 0){}//clear serialbuffer
}
void loop() {
// read data from serial port
if(Serial.available()》0){
delay(100);
comInt = Serial.parseInt();
Serial.print(“Serial.parseInt:”);
Serial.println(comInt);
}
// clear serial buffer
while(Serial.read() 》= 0){}
}
實驗結(jié)果
從實驗結(jié)果可以看出:Serial. parseInt()從串口緩存中讀取第一個有效整數(shù),第一個有效數(shù)字之前的負(fù)號也將被讀取,獨立的負(fù)號將被舍棄。
5.串口查找指定字符串
Serial.find()
說明
從串口緩存區(qū)讀取數(shù)據(jù),尋找目標(biāo)字符串target(char型)
語法
char target[] = ”目標(biāo)字符串”;
Serial.find(target);
參數(shù)
target: 目標(biāo)字符串(char型)
返回
找到目標(biāo)字符串返回真,否則為假
示例
[cpp] view plain copy
char target[] =“test”;
void setup() {
Serial.begin(9600);
while(Serial.read()》= 0){}//clear serialbuffer
}
void loop() {
// read data from serial port
if(Serial.available()》0){
delay(100);
if( Serial.find(target)){
Serial.print(“find traget:”);
Serial.println(target);
}
}
// clear serial buffer
while(Serial.read() 》= 0){}
}
實驗結(jié)果
串口輸入字符中只要有test,函數(shù)返回真,打印出目標(biāo)字符串”test”,否則返回假,不打印任何值。
Serial.findUntil(target,terminal);
說明
從串口緩存區(qū)讀取數(shù)據(jù),尋找目標(biāo)字符串target(char型數(shù)組),直到出現(xiàn)給定字符串terminal(char型),找到為真,否則為假。
語法
Serial.findUntil(target,terminal);
參數(shù)
target : 目標(biāo)字符串(char型)
terminal : 結(jié)束搜索字符串(char型)
返回
如果在找到終止字符terminal之前找到目標(biāo)字符target,返回真,否則返回假。
示例
[cpp] view plain copy
char target[] =“test”;
char terminal[] =“end”;
void setup() {
Serial.begin(9600);
while(Serial.read()》= 0){}//clear serialbuffer
}
void loop() {
// read data from serial port
if(Serial.available()》0){
delay(100);
if( Serial.findUntil(target,terminal)){
Serial.print(“find traget:”);
Serial.println(target);
}
}
// clear serial buffer
while(Serial.read() 》= 0){}
}
實驗結(jié)果
如果串口緩存中有目標(biāo)字符”test”,返回真,但如果先遇到終止字符串”end”則函數(shù)立即終止,不論字符串后面有沒有目標(biāo)字符”test”。
6.向串口寫數(shù)據(jù)
Serial.write();
說明
串口輸出數(shù)據(jù)函數(shù)。寫二進(jìn)制數(shù)據(jù)到串口。
語法
Serial.write(val)
Serial.write(str)
Serial.write(buf, len)
參數(shù)
val: 字節(jié)
str: 一串字節(jié)
buf: 字節(jié)數(shù)組
len: buf的長度
返回
字節(jié)長度
示例
[cpp] view plain copy
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.write(45); // send a byte with thevalue 45
int bytesSent = Serial.write(“hello”); //sendthe string “hello” and return the length of the string.
}
評論
查看更多