本教程内容版权归作者所有,未经授权禁止转载、摘编、复制或用于商业用途,违者必究。
第1课:初识Arduino
了解Arduino开发板、基础电学常识与第一个程序
了解不同类型的Arduino和USB接口
Arduino开发板的分类:
UNO、MEGA2560、LEONARDO、NANO、PRO...
不同USB接口的分类:
USB Type-A、USB Type-B、USB Type-C、microUSB、miniUSB
电学常识
与电相关的物理量:
- 电流 I:单位A(安培)
- 电压 U:单位V(伏特)
- 电阻 R:单位Ω(欧姆)
三者的关系为:
电源的分类:
- 直流电:
- 特点:电流方向不变
- 常见类型:电池/USB供电/单片机开发板供电
- 交流电:
- 特点:电流方向周期性变化
- 常见类型:市电/插座
Arduino的简单使用
什么是引脚?
引脚(又叫管脚、pin)就是从芯片内部引出向外围电路的接线。
Arduino UNO开发板的三类引脚:
1. DIGITAL 数字引脚:只有0,1两种状态
- 数字引脚使用前要先定义引脚状态(输入/输出):
pinMode(x, OUTPUT/INPUT); - 输出OUTPUT:
- 数字信号输出:
digitalWrite(x, HIGH/LOW); - 模拟信号输出(PWM):
analogWrite(x, 0~255);
- 数字信号输出:
- 输入INPUT:
digitalRead(x);
2. ANALOG 模拟引脚:只能作为IN输入
- 输入:
analogRead(Ax);
3. POWER 电源引脚
- 5V:5V稳压电源正极
- 3V3:3.3V稳压电源正极
- GND:地,电源负极
可能还会用到的函数:
- 延时函数:
delay(1000);
其中,1000代表毫秒,1000毫秒等于1秒
Arduino单片机开发步骤:
- 定义引脚:将元器件或模块与Arduino引脚号建立一一对应的联系
- 接线:按照以上引脚定义,连接电路
- 编程调试:
- 编写代码
- 在编程环境菜单栏中选择 工具Tools - 开发板,选择对应使用的开发板
- 在编程环境菜单栏中选择 工具Tools - 端口,选择已连接到电脑上的端口
- 编译上传
编程中的注释:
注释仅供阅读,为了方便自己和其他人理解代码,不会被编译为程序。
- 单行注释:两个斜杠
// - 多行注释:以
/*表示注释开始,以*/表示注释结束
理解程序框架:
void setup() {
// put your setup code here, to run once:
// 将设置语句放在这里,放在这里的语句仅运行一遍
}
void loop() {
// put your main code here, to run repeatedly:
// 将主程序语句放在这里,放在这里的语句将循环执行
}
不通过编程使用Arduino:
通过POWER上的引脚,可以给元器件或模块供电。
- 编写程序,让板载的LED灯(13号数字引脚)闪烁起来!
- 如何让其闪烁慢一点?快一点呢?
第2课:LED与彩灯控制
学习LED接线、数字输出与PWM控制
小灯、彩灯控制
1. 引脚定义
小灯和彩灯,都属于输出设备,只能使用数字引脚(DIGITAL)与其相连。
2. 接线
区分正负极:
发光二极管是二极管的一种。二极管都有同样的导通特性:正向导通,反向截止。简单来说,就是只有正负极接对了,小灯才会亮。
如果小灯在正确接入后大量发热,表明小灯已被烧坏,无法继续使用。已烧坏的小灯无法复原。
导通电压:
- 红色LED:1.5V-2V
- 黄色LED:2V左右
- 绿色LED:2.5V-2.9V
- 蓝色LED:3V以上
- 白色LED:3V以上
限流:
Arduino的POWER只可提供5V和3.3V的电压,DIGITAL引脚输出电压为5V。如果需要Arduino驱动发光二极管,需要加入限流电阻,一般为220Ω。
扩展:彩灯
彩灯即为三色灯,分别为红r、绿g、蓝b,最长脚为公共端,一般公共端接负极。
3. 编程
假设第一步将小灯引脚定义为Arduino数字3号引脚,以下为正确的程序,现象为小灯闪烁:
void setup() {
pinMode(3, OUTPUT);
}
void loop() {
digitalWrite(3, HIGH);
delay(1000);
digitalWrite(3, LOW);
delay(1000);
}
- 定义引脚,连接电路,编写程序,使得接入的LED灯闪烁起来!
- 定义引脚,连接电路,编写程序,使得接入的彩灯闪烁不同的颜色!
第3课:呼吸灯与循环
掌握for循环与analogWrite函数实现呼吸效果
呼吸灯控制(for循环)
1. 引脚定义
呼吸灯需要用到的器材就是小灯或彩灯,属于输出设备,只能使用数字引脚(DIGITAL)与其相连。
如果需要控制小灯亮度(呼吸灯),需要选择带有PWM(脉冲宽度调制)功能的数字引脚(DIGITAL)。
2. 接线
呼吸灯与小灯接线一样,在此不再赘述。
3. 编程
本节课的重点在于两个编程知识点:1. analogWrite函数;2. for循环
analogWrite函数
语法格式:analogWrite(x, 0~255);
其中,x表示引脚号,0~255表示电压范围(即亮度),0表示无电压,255表示5V电压(Arduino所能提供的最高电压)。
假设小灯接到3号数字引脚上,以下程序实现了多个不同亮度闪烁:
void setup() {
pinMode(3, OUTPUT);
}
void loop() {
analogWrite(3, 0);
delay(1000);
analogWrite(3, 80);
delay(1000);
analogWrite(3, 150);
delay(1000);
analogWrite(3, 255);
delay(1000);
}
for循环
for循环是本节课的重点和难点,for循环几乎在所有编程语言中都可以使用,只不过语法格式不同。以下只介绍Arduino C中,for循环的用法。
语法格式范例:
for(初始值; 条件; 增量) {
// 循环体语句
}
- 初始值:一般用于定义一个循环变量,例如i、j、k,并赋初始值
- 条件:一般定义循环停止的条件,如i<=10,表示i小于等于10时继续循环
- 增量:一般定义每次循环执行后要执行的操作,如i++,表示每次循环完,变量i的值都增加1
示例:以下程序实现了10次小灯的闪烁
for(int i = 1; i <= 10; i++) {
digitalWrite(3, HIGH);
delay(1000);
digitalWrite(3, LOW);
delay(1000);
}
知识点补充:
- 变量命名规则:
- 仅可使用:字母(区分大小写)、数字、下划线
- 第一个字符不可为数字
- 不可与保留字冲突(例如不可使用for作为变量名)
- 赋值与等于:在C语言中,一个等于号表示赋值,两个等于号表示数学上的等于
a = 10表示将数值10赋值给变量aa == 10表示变量a与数值10做比较判断
- 自增运算:
a++即表示a = a + 1 - 复合赋值:
a += 10即表示a = a + 10
使用for循环实现呼吸灯
void setup() {
pinMode(3, OUTPUT);
}
void loop() {
// 渐亮
for(int i = 0; i <= 255; i += 5) {
analogWrite(3, i);
delay(10);
}
// 渐暗
for(int i = 255; i >= 0; i -= 5) {
analogWrite(3, i);
delay(10);
}
}
阶段总结
函数使用与接线之间的关系:
digitalWrite(x, HIGH);//与把数字x引脚接到POWER的5V上,效果是一样的digitalWrite(x, LOW);//与把数字x引脚接到POWER的GND上,效果是一样的analogWrite(x, 255);//与把数字x引脚接到POWER的5V上,效果是一样的analogWrite(x, 0);//与把数字x引脚接到POWER的GND上,效果是一样的
- 自己实现一个灯的呼吸灯
- 实现一个彩灯的呼吸灯,亮不同的颜色
第4课:按钮与条件判断
学习数字输入、if条件判断与按钮控制
按钮控制(if判断)
1. 引脚定义
按钮属于数字输入设备,只能使用数字引脚(DIGITAL)与其相连。
2. 接线
按钮模块要接3根线,分别是VCC、GND和OUT
原理:按钮按下时导通,释放时断开,通过检测电平变化判断状态。
3. 编程
本节课的重点在于两个编程知识点:1. digitalRead函数;2. if条件判断
digitalRead函数
语法格式:digitalRead(x)
其中,x表示引脚号。本函数经计算后会返回一个值,HIGH(1)或者LOW(0)
HIGH/LOW表示高低电平状态(即按钮状态),LOW表示无电压,即按钮为释放状态,HIGH表示5V电压,即按钮为按下状态。
if条件判断
if条件判断是本节课的重点和难点,if条件判断几乎在所有编程语言中都可以使用,只不过语法格式不同。
语法格式范例:
if(条件) {
// 条件为真时执行的语句
} else {
// 条件为假时执行的语句
}
综合使用
假设按钮接到3号数字引脚上,使用13号引脚板载LED作为输出显示,注意3号引脚的pinMode函数参数要改为INPUT输入:
void setup() {
pinMode(3, INPUT);
pinMode(13, OUTPUT);
}
void loop() {
if(digitalRead(3) == HIGH) {
digitalWrite(13, HIGH);
} else {
digitalWrite(13, LOW);
}
}
- 实现按钮控制灯的亮灭,按住按钮时,灯亮,释放按钮时,灯灭
第5课:按钮与循环控制
掌握while循环与按钮状态检测进阶
按钮控制(while循环)
本节课的目标是实现等待按钮按下并释放的功能。
1. 引脚定义
按钮属于数字输入设备,只能使用数字引脚(DIGITAL)与其相连。
2. 接线
按钮模块要接3根线,分别是VCC、GND和OUT。(同第4课)
3. 编程
本节课的重点是理解等待按下并释放功能的代码表达形式。
while循环
while循环是本节课的重点和难点,while循环判断几乎在所有编程语言中都可以使用,只不过语法格式不同。
语法格式范例:
while(条件) {
// 语句块(循环体)
}
空语句
若一个语句只有一个分号,则称之为空语句。空语句的作用为什么都不干。
"等待按下"的代码表示(难点)
想要用代码表示"等待按下":
- 首先理解判断释放的语句:
digitalRead(3) == LOW- 这行代码的意思是判断3号引脚是否为低电平(释放),如果释放,返回1(true),如果按下,返回0(false)
- 然后再理解等待按下的概念:
- "等待按下" 等价于 "一直为释放的状态"
- "一直为释放的状态" 也就是 "按钮释放时,什么都不做"
- "按钮释放时,什么都不做" 的代码表示为:
while(digitalRead(3) == LOW); - 注意本句话后面的分号!分号是一条空语句,表示什么都不做。
- 加入
delay(10);的目的是防止按钮的机械抖动。
综合示例
假设按钮接到3号数字引脚上,小灯接到13号数字引脚上。以下程序实现了:等待按钮按下并释放后,灯亮;再次等待按钮按下并释放后,灯灭。
void setup() {
pinMode(3, INPUT);
pinMode(13, OUTPUT);
}
void loop() {
// 等待按下(当前为释放状态就一直等待)
while(digitalRead(3) == HIGH);
delay(10);
// 等待释放(当前为按下状态就一直等待)
while(digitalRead(3) == LOW);
delay(10);
digitalWrite(13, HIGH); // 灯亮
// 再次等待按下
while(digitalRead(3) == HIGH);
delay(10);
// 再次等待释放
while(digitalRead(3) == LOW);
delay(10);
digitalWrite(13, LOW); // 灯灭
}
- 实现按钮控制灯的亮灭,按下释放一次,闪烁一次,再按下释放,闪烁一次
- 实现按钮控制彩灯的颜色,按下释放一次,换一个颜色
恭喜您完成了Arduino入门教程的全部5节课程!您已经掌握了:
- Arduino基础与电学常识
- LED与彩灯控制(数字输出、PWM)
- for循环与呼吸灯效果
- 按钮检测与if条件判断
- while循环与状态等待
继续探索,创造更多精彩项目!
本教程内容版权归作者所有,未经授权禁止转载、摘编、复制或用于商业用途,违者必究。