目录
- 1 编程软件下载
- 2 代码结构
- 3 IO引脚控制
- 3.1 引脚初始化
- 3.2 引脚使用
- 数字量输出
- 数字量输入
- 模拟量输出
- 模拟量输入
- 4 串口
- 串口初始化
- 串口输出
- 串口输入
- 5 外部中断
- 6 函数
- 6.1 映射区间函数
- 6.2 延时函数
- 总结
1 编程软件下载
官网链接:https://www.arduino.cc/
下载链接:https://www.arduino.cc/en/software
软件下载过程中,仅需要登陆Arduino的官网即可,并不需要注册账号。根据自己电脑情况按下图所示去选择下载文件。下载过程中选择仅下载或者捐款。
安装包下载完成后,无需激活等操作,可以直接打开使用,第一次打开时,启动时间较长,耐心等待即可。
软件打开后,可以在首选项中更改系统语言为中文简体(软件界面过于简单,此处不在详细描述,自行探索。)
2 代码结构
Arduino的编程时,必然会存在以下两个函数。具体详细功能详见下述代码。
void setup() {
// put your setup code here, to run once:
// 该函数的代码只在上电后运行一次,这里一般写初始化代码。
}
void loop() {
// put your main code here, to run repeatedly:
// 这个函数相当于大循环,里面的代码会循环执行。
}
3 IO引脚控制
3.1 引脚初始化
函数原型:
pinMode(uint8_t pin, uint8_t mode);
使用示例:
pinMode(2 , OUTPUT);
参数 | 说明 | 示例 |
---|---|---|
uint8_t pin | 引脚号 | 0、1、2…… |
uint8_t mode | 引脚模式 | <见下表3.2> |
表3.2
模式参数 | 说明 |
---|---|
OUTPUT | 输出模式 |
INPUT | 输入模式 |
INPUT_PULLUP | 上拉输入 |
当IO模式设置为模拟量/数字量输入模式,模拟量/数字量输出时,均可分别设置为
OUTPUT
或INPUT
,并无其它代码区分。
3.2 引脚使用
数字量输出
函数原型 :
void digitalWrite(uint8_t pin, uint8_t val);
使用示例:
digitalWrite(1,HIGH);
digitalWrite(1,LOW);
数字量输入
函数原型 :
int digitalRead(uint8_t pin); // 返回值:HIGH,LOW
使用示例:
int a;
a = digitalRead(5);
模拟量输出
函数原型 :
参数val
设定范围:0-255
;
void analogWrite(uint8_t pin, int val);
使用示例:
analogeWrite(2,125); // 设定值:0-255
模拟量输入
函数原型 :
返回值范围:0-1023
;
int analogRead(uint8_t pin);
使用示例:
int val;
val = analogRead(3); // 设定值:0-255
注: 带~
标识的引脚才可以做模拟输出
4 串口
串口初始化
Serial.begin(9600); // 串口初始化,参数为波特率
串口输出
Serial.println("123"); //自带回车效果
Serial.print("456464");
Serial.print(55,BIN); // 二进制输出55这个数值 参数还可以是DEC十进制,HEX十六进制
串口输入
读取一个字节,没有数据时,返回的是-1;
a = Serial.read();
检测串口数据
int a;
a = Serial.available(); // 检测控制器是否接收到数据,返回值为等待读取的数据字节数。没有数据就返回0
5 外部中断
函数原型
void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode);
参数说明:
1、uint8_t interruptNum
:中断号。
UNO 版本只有两个外部中断。
型号 | 中断0 | 中断1 |
---|---|---|
UNO | pin 2 | pin 3 |
2、userFunc
:中断处理函数,该函数属于自定义函数,定义时,不能有返回值和参数。
3、mode
:中断模式。
参数 | 模式 |
---|---|
LOW | 低电平触发 |
CHANGE | 电平变化触发 |
RISING | 上升沿触发 |
FALLING | 下降沿触发 |
函数示例:
void setup() {
Serial.begin(9600);
attachInterrupt(0,set,LOW); // 写在初始化函数中
}
// 中断处理函数
void set()
{
Serial.print("564");
}
6 函数
下面介绍一些可以直接调用的内部函数,不用加头文件。
6.1 映射区间函数
函数原型:
long map(long x, long in_min, long in_max, long out_min, long out_max);
参数:映射值,映射的旧区间,映射的新区间
返回值:为映射到新区间的值。
// 映射值,映射的旧区间,映射的区间。返回值为新映射值。
y = map(val,0,1023,0,255);
6.2 延时函数
delay(1000); // 单位:ms
delayMicroseconds(10); // 单位:us
待续……
总结
本人在学习过51单片机和STM32后,偶尔想到接触一下Arduino开发板,学习时间并不长,仅两天。现根据学习感受对51/32和Arduino做一些比较。
类别 | Arduino | 51/32单片机 |
---|---|---|
开发软件 | 官网直接下载,无需激活,安装可用 | 官网下载,需要激活 |
编程语言 | C/C++语言 | C语言 |
编程特点 | 大量的可用开源库文件,基础库无需包含可直接使用 | 需要自己添加使用的库文件,并且需要自己include |
使用特点 | 关于引脚,串口,PWM,AD/DA等资源可以直接调用函数使用,无需配置 | 需要配置外设工作方式,甚至时钟 |
使用特点 | 关于常用的一些模块器件通过引入库文件后直接调用函数使用 | 需要写时序和控制方式,读写命令数据函数 |
开发板特点 | 引脚数量较少 | 根据不同型号选择不同引脚功数量的器件 |