搜索代码

ESP32教程7/55-在ESP32 Arduino编程中使用数组-SunFounder的ESP32物联网学习套件

ESP32教程7/55-在ESP32 Arduino编程中使用数组-SunFounder的ESP32物联网学习套件

在本教程中,我们将探讨如何在ESP32 Arduino编程中使用数组。数组允许您在单个变量中存储多个值,从而更容易管理数据,尤其是在处理相似项目集合时。本教程将指导您定义、访问和修改数组,以及利用循环有效地与数组交互。理解这些概念将大大增强您使用ESP32编程的能力。

我们将特别介绍使用不同类型的循环,如forwhiledo 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_wiring
ESP32-07_74HC595_walking_light_schematic
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);
  }
}

资源与参考

文件📁

没有可用的文件。