码丁实验室,一站式儿童编程学习产品,寻地方代理合作共赢,微信联系:leon121393608。
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){};
}