【Arduino数组流水灯实验(array数组的学习)】

Arduino数组流水灯实验(array数组的学习)

实验效果展示:

IMG_8126(1)

一、前期准备:

1.必需的组件:

1 × Arduino UNO 板
3 × 330欧姆电阻
3 × LED
若干跳线

2.硬件连接

按照电路图进行连接,依次将三个LED灯接入7,8,9引脚,如下图所示。
请添加图片描述

3.基础代码

const byte LEDs[]={7,8,9};
const byte total = 3;
byte index = 0;
void setup() {
// put your setup code here, to run once:
  for(byte i = 0; i < total; i++) {
  pinMode(LEDs[i], OUTPUT); //i的值将从0到4,依序设置7,8,9引脚为输出引脚。
  }
}
void loop() {
// put your main code here, to run repeatedly:
 for (byte i = 0; i < total; i++) {
  digitalWrite(LEDs[i], LOW);
  }
 digitalWrite(LEDs[index],HIGH);
 index ++;
 if (index == total)
  index = 0;
  delay(500);
}

二、代码实现

IMG_8126(1)

三、array数组的初始化

1.array数组说明:

数组是一种可通过索引号访问的同类型变量集合。

2.我的代码中使用到的数组:

const byte LEDs[]={7,8,9};//定义LED引脚数组
const byte total = 3;//定义数组长度

3. 数组长度

我原本定义的数组内容有3个,数组长度为3。
如果将代码更改为

const byte LEDs[]={7,8,9};//定义LED引脚数组
const byte total = 5;//定义数组长度

数组内容有{7,8,9},显示3个,但是我定义的数组长度为5。
如果定义数组时指定了长度,并且初始化的内容个数少于指定的长度,那么数组长度就是我们指定的长度,而不足的部分会用默认值填充(对于内置类型,如int类型,默认值为0)。
所以,实际上的数组内容为{7,8,9,0,0}。

四、拓展实验

如果LEDs数组变成了4个引脚即(7,8,9,10)需要修改哪些代码?

原代码:

const byte LEDs[]={7,8,9};
const byte total = 3;

只需将代码更改为:

const byte LEDs[]={7,8,9,10};
const byte total = 4;

答:将定义的引脚数组内容加入10,数组长度更改为4即可。

<think>嗯,用户想了解Arduino中的数组比较。首先,我需要回忆一下Arduino数组处理方式。Arduino用的是C/C++,所以数组比较应该和C语言类似。用户可能想知道如何判断两个数组是否相等,或者在程序中比较它们的元素。 首先,得解释数组Arduino中的存储方式,数组名其实是指针,指向第一个元素。直接使用==比较两个数组名的话,实际上比较的是内存地址,而不是内容。这点很重要,用户可能在这里容易出错,需要强调。 接下来,正确的比较方法应该是逐个元素对比。用户可能需要一个循环结构,遍历每个元素,检查是否相等。如果所有元素都相等,才认为数组相同。这里需要给出示例代码,比如用for循环逐个比较,设置一个标志变量,遇到不相等就跳出循环。 另外,用户可能还想知道如何比较不同长度的数组,或者如何处理多维数组。不过通常基础问题可能只涉及一维数组的长度相等的情况。但最好还是提一下长度不同的情况,避免用户遇到问题。 可能还需要提到memcmp函数,这是C标准库中的函数,可以用来比较内存块。使用memcmp可以简化代码,但需要确保数组长度相同,否则会有问题。这里要提醒用户注意数组越界的风险。 安全问题也要注意,比如数组越界访问,这会导致不可预知的行为。在循环中必须检查索引是否在有效范围内。此外,如果数组作为函数参数传递,需要传递长度参数,因为数组作为指针传递时会丢失长度信息。 用户可能有不同的应用场景,比如传感器数据对比、状态记录等,所以示例可以贴近实际应用,比如比较传感器读数是否匹配预设值。 最后,总结一下步骤:确认数组长度相同,逐个元素比较或使用memcmp,处理结果。需要提醒常见的错误点,如直接使用==比较地址,忽略长度检查等。</think>在Arduino中比较数组需要特别注意底层实现原理。以下是分步说明和关键要点: 一、数组比较的本质 1. 数组名本质是指向首元素的指针 2. 直接使用`==`运算符时:`array1 == array2` 实际比较的是内存地址,而非数组内容 3. 错误示例: ```cpp int a[] = {1,2,3}; int b[] = {1,2,3}; if(a == b) // 永远返回false,因为地址不同 ``` 二、正确的比较方法 1. 元素逐个比对法(推荐) ```cpp bool compareArrays(int arr1[], int arr2[], int length) { for(int i=0; i<length; i++){ if(arr1[i] != arr2[i]) return false; } return true; } // 使用示例 int arrayA[3] = {10, 20, 30}; int arrayB[3] = {10, 20, 30}; bool result = compareArrays(arrayA, arrayB, 3); ``` 2. 使用memcmp函数(需长度一致) ```cpp #include <string.h> // 需要包含头文件 int arr1[] = {1,2,3}; int arr2[] = {1,2,3}; bool isEqual = (memcmp(arr1, arr2, sizeof(arr1)) == 0); ``` 三、注意事项 1. 必须确保数组长度相同 - 建议使用`sizeof`获取数组字节数: $$ \text{元素个数} = \frac{sizeof(array)}{sizeof(array[0])} $$ 2. 多维数组需要嵌套循环 3. 浮点数数组需用近似比较(考虑精度误差) ```cpp bool compareFloat(float a, float b) { return fabs(a - b) < 0.00001; } ``` 四、典型应用场景 1. 传感器数据匹配(如校准值验证) 2. 状态序列比对(如输入密码验证) 3. 数据校验(通信协议校验) 五、错误防范 1. 避免数组越界访问 2. 当数组作为函数参数传递时,必须同时传递数组长度 3. 动态数组建议使用容器类(如`std::vector`) 实际开发建议:优先使用元素逐个比对法,虽然代码量稍多,但可读性更好且便于调试。当处理大型数组时,memcmp的性能优势会显现,但要注意类型安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值