Arduino入门2——串口驱动函数及用法
上期,我们简单的认识了一下Arduino,浅浅的入了个门,这一期我们介绍以下Arduino串口常用的函数及用法
1.IO
常用串口库函数如下:
函数名 | 用法及解析 |
---|---|
pinMode() | 用于IO口初始化 |
digitalWrite() | 对IO口写入高低电平 |
digitalRead() | 读取IO口的高低电平 |
analogReference() | 配置AD采集的参考电压 |
analogWrite() | 对应IO口实现AD转换,精度可达10位 |
analogRead() | 对应IO口实现DA转换,精度为8位 |
下面是对应的一些用法:
2.串口
常用串口库函数如下:
函数名 | 用法及解析 |
---|---|
Serial.begin(9600) | 用于串口初始化,参数为波特率 |
Serial.print(val,fromat) | 串口输出函数,val为输出的内容,fromat为输出格式,可以省略,省略时默认为十进制 |
Serial.println(val,fromat) | 串口输出函数,相对于Serial.print的区别是自带换行 |
Serial.write(val) | 串口输出函数,发送单个字节或字符串 |
Serial.available() | 用于检测串口是否接收到数据,返回值为读取数据的长度 |
Serial.read() | 串口读取函数,每次读取一个字节并返回,当串口没有接收到数据时,返回-1,读取完数据后,下次调用会读取下个字节 |
Serial.parselnt() | 串口解析函数,用来读取接收到的数据中的整数,在读取到整数后读取到字符会停止,读取后缓冲区内的内容会被清除。比如读取的内容为123adc456,则需要读取两次,第一次读取到123.第二次读取adc456,但由于adc为字符,所有只读取456。 |
Serial.parseFloat() | 也是串口解析函数,用来读取小数 |
下面是对应的一些用法:
- 示例1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | void setup() {<!-- --> // put your setup code here, to run once: Serial.begin(9600); //串口初始化 } void loop() {<!-- --> // put your main code here, to run repeatedly: Serial.print( "Hello" ); //发送字符串 Serial.print( 'A' ); //发送字符 Serial.println(25); //默认以10进制发送数字25 Serial.println(25,DEC); //十进制发送数字25 -》 25 Serial.println(25,BIN); //二进制发送数字25 -》 11001 Serial.println(25,OCT); //八进制发送数字25 -》 31 Serial.println(25,HEX); //八进制发送数字25 -》 19 Serial.print(1.2345); //发送1.23,默认保留2位小数,四舍五入 delay(50000); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 | void setup() {<!-- --> // put your setup code here, to run once: Serial.begin(9600); //串口初始化 } void loop() {<!-- --> // put your main code here, to run repeatedly: for ( int i = 0 ;i<Serial.available();i++) //判断是否介绍到数据, {<!-- --> Serial.write(Serial.read()); //依次打印介绍的数据 Serial.println(); //换行 delay(500); // 延时,让显示更直观 } } |
1 2 3 4 5 6 7 8 9 10 11 12 | void setup() {<!-- --> // put your setup code here, to run once: Serial.begin(9600); //串口初始化 } void loop() {<!-- --> // put your main code here, to run repeatedly: for ( int i = 0 ;i<Serial.available();i++) //判断是否介绍到数据, {<!-- --> Serial.print(Serial.parseInt()); //依次打印接收的整数 Serial.println(); //换行 delay(500); // 延时,让显示更直观 } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | //1. 建立开发板与电脑串口连接,像电脑发送姓名、年龄、身高等信息 void setup() {<!-- --> // put your setup code here, to run once: Serial.begin(9600); } void loop() {<!-- --> // put your main code here, to run repeatedly: Serial.write( "naem: 不想写代码的我" ); Serial.println(); Serial.write( "age: 18" ); Serial.println(); Serial.write( "height: 180" ); Serial.println(); delay(1000); } |
- 实现通过串口监视器给开发板发送信息,在把接收的信息发送回去
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | //实现通过串口监视器给开发板发送信息,在把接收的信息发送回去 void setup() {<!-- --> // put your setup code here, to run once: Serial.begin(9600); } void loop() {<!-- --> // put your main code here, to run repeatedly: for ( int i =0; i<Serial.available();i++) {<!-- --> Serial.write(Serial.read()); Serial.println(); delay(500); } } |
- 实现加法计算器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | //实现加法计算器, int Add( int a, int b) {<!-- --> Serial.print(a); Serial.print( '+' ); Serial.print(b); Serial.print( '=' ); Serial.println(a+b); return a+b; } void setup() {<!-- --> // put your setup code here, to run once: Serial.begin(9600); } void loop() {<!-- --> // put your main code here, to run repeatedly: if (Serial.available()) {<!-- --> Add(Serial.parseInt(),Serial.parseInt()); } |
3.中断
常中断函数如下:
函数名 | 用法及解析 |
---|---|
attachInterrupt() | 中断开启函数 |
digitalPinToInterrupt() | 获取对应引脚中断号的函数,返回值为中断编号 |
detachInterrupt() | 关闭引脚对应的中断 |
下面是其对应的用法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | /* attachInterrupt()中断开启函数, 第一个参数是开启的中断号,不同引脚、不同开发板对应的中断号不同,这一点需要注意 第二个参数是对应中断的服务函数,需要自己定义,必须是无参数无返回值类型 第三个是中断的触发方式,一个四种:LOW,低电平触发;CHANGE,电平变化触发;FALLING,下降沿触发;RISING,上升沿触发; 此外,还有一种触发方式,HIGH,只有 Due, Zero and MKR1000这些板子支持。 注:不同开发板引脚与中断号对应如下: 中断号: 0 1 2 3 4 5 UNO 引脚2 3 Mega2560 引脚2 3 21 20 19 18 Leonardo 引脚3 2 0 1 Due ------------所有IO口---------------- digitalPinToInterrupt(pin):获取对应引脚中断号的函数,返回值为中断编号 detachInterrupt(pin);关闭引脚对应的中断,一般不常用 */ int i = 0; void setup() {<!-- --> // put your setup code here, to run once: pinMode(LED_BUILTIN,OUTPUT); //设置LED输出模式 pinMode(2,OUTPUT); // 定义引脚2,作为输入,将引脚2和引脚3通过杜邦线相连,通过对引脚2写入数据触发引脚3的中断 digitalWrite(2,LOW); //设置引脚2初始电平为低电平 digitalWrite(LED_BUILTIN,LOW); //熄灭LED attachInterrupt(digitalPinToInterrupt(3),function,CHANGE); //开启引脚3对应的中断 } void loop() {<!-- --> // put your main code here, to run repeatedly: i++; digitalWrite(2,i%2); //通过i的值,改变引脚2,进而改变引脚3的电平,使其产生中断 delay(500); //每500ms产生一次中断 } void function() {<!-- --> digitalWrite(LED_BUILTIN,i%2); //闪烁LED。 } |
