ESP32教程7/55-在ESP32 Arduino编程中使用数组-SunFounder的ESP32物联网学习套件
在本教程中,我们将探讨如何在ESP32 Arduino编程中使用数组。数组允许您在单个变量中存储多个值,从而更容易管理数据,尤其是在处理相似项目集合时。本教程将指导您定义、访问和修改数组,以及利用循环有效地与数组交互。理解这些概念将大大增强您使用ESP32编程的能力。
我们将特别介绍使用不同类型的循环,如for、while和do while,来遍历数组元素。这将帮助您自动化任务并使程序更高效。要查看这些概念的实际应用,请务必在2:30观看视频中的实际演示。
硬件说明
本教程中使用的主要硬件组件是ESP32微控制器。ESP32是一款功能强大、成本低廉的微控制器,具有Wi-Fi和蓝牙功能,适用于广泛的物联网应用。该板可以执行类似于Arduino Uno的任务,同时提供额外的功能,如云连接。
在本特定教程中,我们将利用数组通过数字引脚控制输出。每个引脚可以设置为高或低,使我们能够根据数组中存储的数据创建各种模式或行为。ESP32的GPIO引脚将被配置为输出,使我们能够操作连接的设备或组件。
接线说明
ESP32-07_74HC595_walking_light_wiring
要为本次教程接线您的ESP32,首先连接数字引脚。将STcp引脚(27)连接到移位寄存器的ST_CP引脚。SHcp引脚(26)应连接到移位寄存器的SH_CP引脚。最后,将DS引脚(25)连接到移位寄存器的DS引脚。确保ESP32的地线与移位寄存器的地线相连,以提供公共参考。
确保使用稳定的3.3 V电源为ESP32供电。如果您使用其他组件,请确保它们与ESP32的电压电平兼容。在系统通电前,务必仔细检查连接,以避免任何潜在损坏(视频中4:10处)。
代码示例与讲解
在提供的代码片段中,我们定义了一个名为datArray的数组,用于存储二进制值。数组中的每个值对应一个可以通过GPIO引脚输出的不同模式。数组定义如下:
int datArray[] = {B00000000, B00000001, B00000011, B00000111, B00001111, B00011111, B00111111, B01111111, B11111111};
该数组包含二进制表示,其中每个位对应一个引脚状态(开或关)。在loop()函数中,我们使用for循环遍历数组以输出这些模式:
for(int num = 0; num < 10; num++) {
digitalWrite(STcp, LOW);
shiftOut(DS, SHcp, MSBFIRST, datArray[num]);
digitalWrite(STcp, HIGH);
delay(1000);
}
在此循环中,我们不断将datArray中的数据发送到移位寄存器,从而产生走马灯效果。delay(1000)在每个模式之间引入暂停,使变化可见。完整代码请参考下方,它将动态加载。
演示/预期效果
完成接线并上传代码后,您应该会在连接的设备上看到走马灯效果。数组中的每个位将依次点亮,形成视觉上引人入胜的模式。请注意连接反接可能导致意外行为(视频中8:15处)。
视频时间戳
- 00:00 开始
-
1:24 介绍
-
3:15 74HC595移位寄存器芯片
-
5:25 走马灯接线
-
18:56 74HC595的Arduino代码讲解
-
24:24 项目演示
-
25:49 修复代码
-
28:11 灯光来回移动
-
30:28 走马灯
图像
ESP32-07_74HC595_walking_light_wiring
ESP32-07_74HC595_walking_light_schematic
ESP32-07_74HC595_walking_light_wiring
ESP32-07_74HC595_walking_light_schematic
807-ESP32 Tutorial 7/55 - Walking Light using 74HC595 and learn array
语言: C++
const int STcp = 27; // ST_CP
const int SHcp = 26; // SH_CP
const int DS = 25; // DS
int datArray[] = {B00000000, B00000001, B00000011, B00000111, B00001111, B00011111, B00111111, B01111111, B11111111};
void setup ()
{
// 将引脚设置为输出
pinMode(STcp,OUTPUT);
pinMode(SHcp,OUTPUT);
pinMode(DS,OUTPUT);
}
void loop()
{
for(int num = 0; num <10; num++)
{
digitalWrite(STcp,LOW); // 将ST_CP接地,并在传输期间保持低电平。
shiftOut(DS,SHcp,MSBFIRST,datArray[num]);
digitalWrite(STcp,HIGH); // 拉动 ST_CPST_CP 以保存数据
delay(1000);
}
}