Arduino串口通信简介

Arduino串口操作常用的一些函数

Serial.begin();

 

|

开启串口,通常置于setup()函数中。

语法:

Serial.begin(speed);

|

参数

speed: 波特率,一般取值300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600,115200

这里设置好波特率之后,需要在串口监视器中也设置同样的波特率,只有这样,arduino和电脑才能通过串口进行数据传输。

2.清空串口缓存

Serial.flush();

|

等待输出数据传送完毕,避免数据读取错误。

3.Serial.read()函数读取串口缓存中的一个字符,并删除已读字符。

4.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.print()一样。

5.读串口缓存区数据

Serial.available();

|

说明

判断串口缓冲器的状态函数,用以判断数据是否送达串口。

下面开始例子:

void setup()

{

Serial.begin(9600);

}


void loop()

{


Serial.println(“Hello world!”);

 
delay(100);

}

上面代码将从arduino通过串口传送字符串到电脑端的串口监视器上。

float num=10.5;

void setup()

{

Serial.begin(9600);

}


void loop()

{


Serial.println(num);

 
delay(100);

}

这里面打印的将是一个浮点数变量,默认保留两位小数点,我们也可以手动确定保留的精度

(0到6位),例如:
Serial.println(num,4);

2.从电脑端的串口监视器向arduino发送数据

串口监视器上方有一个输入框和一个send按钮,在输入框内输入内容,点击send按钮就可以向arduino发送数据了。

发送过来了,arduino如何接收呢?

使用Serial.read()函数,其一次只能读取一个字节。

一个字节包含8个比特,其范围是(00000000到11111111之间)转换为十进制别是0到255。

Arduino中char 数据类型只占用一个字节。一个ASCII字符也占用一个字节。

Int num=0;

void setup()

{

Serial.begin(9600);

}


void loop()

{

while(Serial.available()>0)

   {

    num=Serial.read();

       
Serial.println(num);

   
}

}

如何让num表示为一个你输入在输入框中的整数呢?

通过Serial.read()函数得到的是对应字符的ASCII码值。

例如在串口监视器里面输入1,num得到的其实是字符’1’的ASCII码值,这个时候是不能进行数学计算的(或者说计算结果不是你想要的)。

那如何将其转化成数字1呢?只需要减去字符’0’的ASCII码值就可以了。

int num=0;

void setup()

{

Serial.begin(9600);

}


void loop()

{

while(Serial.available()>0)

   {

    num=Serial.read()-‘0’;

   
}

       
Serial.println(num);

}

这样只能得到一位整数,如果我们需要得到更多位的整数怎么办呢?

通过乘以10来进行移位操作(个位向十位,十位向百位等)代码如下:

void setup()

{

Serial.begin(9600);

}


void loop()

{

   
int num=0;

   
int a=0;

while(Serial.available()>0)

   {

        num=num*10;

    a=Serial.read()-‘0’;

        num=num+a;

       
delay(5);

   
}

       
Serial.println(num);

  while(Serial.available()==0){ };

}