电子技术电子技术
 
转帖:Arduino教程——串口的一些高级用法
kc2038 2013-9-7 14:48:33
Arduino教程——串口的一些高级用法
http://www.arduino.cn/thread-2710-1-1.html
1.配置串口通信数据位、校验位、停止位

通常我们使用
Serial.begin(speed)
来完成串口的初始化,这种方式,只能配置串口的波特率。

而使用
Serial.begin(speed, config)
可以配置数据位、校验位、停止位等。

例如Serial.begin(9600,SERIAL_8E2)是将串口波特率设为9600,数据位8,偶校验,停止位2

config可用配置如下:

config可选配置
数据位
校验位
停止位
 
config可选配置
数据位
校验位
停止位
SERIAL_5N1
5

1
 
SERIAL_5E2
5

2
SERIAL_6N1
6

1
 
SERIAL_6E2
6

2
SERIAL_7N1
7

1
 
SERIAL_7E2
7

2
SERIAL_8N1
8

1
 
SERIAL_8E2
8

2
SERIAL_5N2
5

2
 
SERIAL_5O1
5

1
SERIAL_6N2
6

2
 
SERIAL_6O1
6

1
SERIAL_7N2
7

2
 
SERIAL_7O1
7

1
SERIAL_8N2
8

2
 
SERIAL_8O1
8

1
SERIAL_5E1
5

1
 
SERIAL_5O2
5

2
SERIAL_6E1
6

1
 
SERIAL_6O2
6

2
SERIAL_7E1
7

1
 
SERIAL_7O2
7

2
SERIAL_8E1
8

1
 
SERIAL_8O2
8

2

2. if (Serial)的用法

当串口被打开时,Serial的值为真。串口被关闭时Serial的值为假。

比较囧的是,这个方法只适用于LeonardomicroSerial,也就是说连接连接到电脑USB的那个模拟串口。

例如以下程序,当你没有使用串口监视器打开串口时,程序就会一直循环运行while (!Serial) {;} ,当你打开串口监视器,程序会退出while循环,开始loop中的程序。


代码:


void setup() {
  Serial.begin(9600);
  while (!Serial) {;}
}

void loop() {

}

3.
readpeek输入方式的差异

串口接收到的数据都会暂时存放在接收缓冲区中,使用read()peek()都是从接收缓冲区中读取数据。不同的是,使用read()读取数据后,会将该数据从接收缓冲区移除;而使用peek()读取时,不会移除接收缓冲区中的数据。

你可以使用以下程序,观察其运行结果:


代码一:


char col;
void setup() {
  Serial.begin(9600);
}

void loop() {
  while(Serial.available()>0){
    col=Serial.read();
    Serial.print("Read: ");
    Serial.println(col);
    delay(1000);
  }
}

代码二:

char col;
void setup() {
  Serial.begin(9600);
}

void loop() {
  while(Serial.available()>0){
    col=Serial.peek();
    Serial.print("Read: ");
    Serial.println(col);
    delay(1000);
  }
}

4.
串口读入int型数据

实际上是串口读入字符串,再转换为int型数据。


代码:

while (Serial.available() > 0) {
    int inChar = Serial.read();
    if (isDigit(inChar))
{
inString += (char)inChar;
}
i=inString.toInt();
}
}

5.
输出不同进制的文本

我们可以是用 Serial.print(val, format)的形式输出不同进制的文本

参数val 是需要输出的数据

参数format 是需要输出的进制形式,你可以使用如下参数:

BIN(二进制)

DEC(十进制)

OCT(八进制)

HEX(十六进制)

例如,使用Serial.print(123,BIN),你可以在串口调试器上看到1111011

使用Serial.print(123,HEX),你可以在串口调试器上看到7B

想参与大家的讨论?现在就 登录 或者 注册

nkc production server  https://github.com/kccd/nkc.git

科创研究院 (c)2001-2018

蜀ICP备11004945号-2 川公网安备51010802000058号