第1课:初识Arduino

了解Arduino开发板、基础电学常识与第一个程序

了解不同类型的Arduino和USB接口

Arduino开发板的分类:

UNO、MEGA2560、LEONARDO、NANO、PRO...

不同USB接口的分类:

USB Type-A、USB Type-B、USB Type-C、microUSB、miniUSB

电学常识

与电相关的物理量:

三者的关系为:

I = U / R

电源的分类:

Arduino的简单使用

什么是引脚?

引脚(又叫管脚、pin)就是从芯片内部引出向外围电路的接线。

Arduino UNO开发板引脚示意图

Arduino UNO开发板的三类引脚:

1. DIGITAL 数字引脚:只有0,1两种状态

2. ANALOG 模拟引脚:只能作为IN输入

3. POWER 电源引脚

💡 提示
其中,x均代表引脚号,板载LED灯的引脚号为数字引脚13

可能还会用到的函数:

Arduino单片机开发步骤:

  1. 定义引脚:将元器件或模块与Arduino引脚号建立一一对应的联系
  2. 接线:按照以上引脚定义,连接电路
  3. 编程调试
    1. 编写代码
    2. 在编程环境菜单栏中选择 工具Tools - 开发板,选择对应使用的开发板
    3. 在编程环境菜单栏中选择 工具Tools - 端口,选择已连接到电脑上的端口
    4. 编译上传

编程中的注释:

注释仅供阅读,为了方便自己和其他人理解代码,不会被编译为程序。

理解程序框架:

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正负极识别 LED实物图

导通电压:

限流:

Arduino的POWER只可提供5V和3.3V的电压,DIGITAL引脚输出电压为5V。如果需要Arduino驱动发光二极管,需要加入限流电阻,一般为220Ω

LED电路连接图

扩展:彩灯

彩灯即为三色灯,分别为红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(初始值; 条件; 增量) {
  // 循环体语句
}

示例:以下程序实现了10次小灯的闪烁

for(int i = 1; i <= 10; i++) {
  digitalWrite(3, HIGH);
  delay(1000);
  digitalWrite(3, LOW);
  delay(1000);
}

知识点补充:

使用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);
  }
}

阶段总结

输出信号与电压关系

函数使用与接线之间的关系:

🎯 本课任务
  • 自己实现一个灯的呼吸灯
  • 实现一个彩灯的呼吸灯,亮不同的颜色

第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电压,即按钮为按下状态。

💡 注意
也有些按钮是LOW表示按钮按下,HIGH表示按钮释放!请根据实际情况调整代码。

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(条件) {
  // 语句块(循环体)
}
💡 说明
语句块可以用一条语句代替。这标明了循环的内容(即循环体),若使用语句块,则语句块中的内容都会被循环执行,若不使用语句块,则循环内容仅为while循环后的第一条语句。

空语句

若一个语句只有一个分号,则称之为空语句。空语句的作用为什么都不干。

"等待按下"的代码表示(难点)

想要用代码表示"等待按下":

综合示例

假设按钮接到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循环与状态等待

继续探索,创造更多精彩项目!