流水灯实验
大约 2 分钟ESP32Arduino
上节课我们已经学习了如何点亮一颗 LED 并且让其闪烁,这节课我们学习如何制作流水灯。
硬件电路设计
物料清单(BOM 表):
材料名称 | 数量 |
---|---|
直插式 LED | 5 |
1kΩ 电阻 | 5 |
杜邦线(跳线) | 若干 |
面包板 | 1 |
每一个 LED 的正极与开发板一个 GPIO 引脚相连,并串联一个电阻,负极接 GND,如下图:
当然你也可以选择只使用一个电阻:
软件程序设计
1. 正常流水灯
因为我们要用到多个 GPIO 引脚,所以,我们最好把所有的 GPIO 引脚放在一个数组中,然后遍历这个数组
// 定义 GPIO 引脚数组
int pin_list[5] = {13, 12, 14, 27, 26};
// 获取数组长度
int size = sizeof(pin_list) / sizeof(pin_list[0]);
void setup() {
// 设定 GPIO 引脚为输出模式
for (int i=0; i<size;i++) {
pinMode(pin_list[i], OUTPUT);
}
}
void loop() {
// 将所有引脚设置为高电平
for (int i=0;i<size;i++) {
digitalWrite(pin_list[i], HIGH);
delay(50);
}
// 将所有引脚设置为低电平
for (int i=0;i<size;i++) {
digitalWrite(pin_list[i], LOW);
delay(50);
}
}
2. 反复流水灯
我们还可以对该程序进行微调,比如之前是依次改变流水灯的状态,现在,修改为让流水灯往复亮。
// 定义 GPIO 引脚数组
int pin_list[5] = {13, 12, 14, 27, 26};
// 获取数组长度
int size = sizeof(pin_list) / sizeof(pin_list[0]);
void setup() {
// 设定 GPIO 引脚为输出模式
for (int i=0; i<size;i++) {
pinMode(pin_list[i], OUTPUT);
}
}
void loop() {
// 将所有引脚设置为高电平
for (int i=0;i<size;i++) {
digitalWrite(pin_list[i], HIGH);
delay(50);
}
// 将所有引脚设置为低电平
for (int i=size-1;i>=0;i--) {
digitalWrite(pin_list[i], LOW);
delay(50);
}
}
3. LED 移动
让 LED 实现平移的效果是这样实现的,每次在我点亮这颗 LED 的时候,同时把上一颗 LED 的状态改为低电平,并且当索引值为 0 时,让最后一颗 LED 状态改为低电平代码如下:
// 定义 GPIO 引脚数组
int pin_list[5] = {13, 12, 14, 27, 26};
// 获取数组长度
int size = sizeof(pin_list) / sizeof(pin_list[0]);
void setup() {
// 设定 GPIO 引脚为输出模式
for (int i=0; i<size;i++) {
pinMode(pin_list[i], OUTPUT);
}
}
void loop() {
// 将所有引脚设置为高电平
for (int i=0;i<size;i++) {
digitalWrite(pin_list[i], HIGH);
if (i > 0){
digitalWrite(pin_list[i-1], LOW);
}else {
digitalWrite(pin_list[size-1], LOW);
}
delay(250);
}
}