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:
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);
}
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);                  // 延时,让显示更直观
  }
}
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. 建立开发板与电脑串口连接,像电脑发送姓名、年龄、身高等信息
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);
}
- 实现通过串口监视器给开发板发送信息,在把接收的信息发送回去
//实现通过串口监视器给开发板发送信息,在把接收的信息发送回去
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);
  }
  
}
- 实现加法计算器
//实现加法计算器,
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() | 关闭引脚对应的中断 | 
下面是其对应的用法:
/*
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。
}


 会员中心
 会员中心 会员注册
 会员注册 
  
  
  
  
  
  
  
  
  返回顶部
返回顶部 刷新页面
刷新页面 下到页底
下到页底