for循环??一个Arduino 多个LED闪烁实验拿下了!

1.前言

你是否因为大一迷惘而焦虑??
这个实验教程献给所有大一想努力的新手

2.欣赏成果

Arduino 多个LED闪烁实验成果

3.安装对应软件

首先先安装对应软件Arduino

网址arduino.cc/en/software

4.学习软件的使用

安装结束,我们进入首页选择我们对应的开发板Arduino UNO

在这里插入图片描述

选择之后就会将UNO开发板作为默认**(UNO开发板适合初学者简单易上手)

在这里插入图片描述

并将开发板连接到电脑**(注意:后面一定带有后缀,我前面买的盗版无法识别就没有后缀)**

如果没有出现开发板(com)请检查链接器是否连接好或者开发板是否接触不良

5.准备道具

准备面包板
UNO开发板
4个220v电阻
4个LED灯
​​​​在这里插入图片描述
LED灯长的一端为正极,短的一端为负极(如图)电阻在家用电(220V)用220欧姆,接着用杜邦线连接到开发板的8,9,10,11GND接口(如图)

6.代码

void setup()

{

  for(int i=8;i<=11;i++)

  {

    pinMode(i,OUTPUT);

  }

}

void loop()

{

  for(int x=8;x<=11;x++)

  {

    digitalWrite(x,HIGH);

    delay(500);

    digitalWrite(x,LOW);

    delay(500);

  }

}

代码解释


delay(1000)是延迟1000毫秒(1秒)

digitalWrite(2, LOW(HIGH))是将数字引脚写HIGH(高电平)或LOW(低电平),2是开发板的几接口

pinMode(2, OUTPUT)是通过pinMode()函数,你可以将Arduino的引脚配置为以下三种模式:

输出(OUTPUT)模式
输入(INPUT)模式
输入上拉(INPUT_PULLUP)模式

接下验证 ,左上角的勾是验证符号

在这里插入图片描述

查看是否验证成功,然后上传

在这里插入图片描述

上传成功就可以欣赏到开头的结果了

7.心得

我认为这是个新的开始我也遇到了很多问题(见下面),但是当我成功做出来了后感到非常自豪,所以我认为在这个时代人类要不断走出自己的舒适圈,才能前进。最后点一下赞,一起加油吧,,我是FOX,励志做一个博学的萌新。

8.花絮

在看到代码的时候,我就已经在想代码有什么可以修改的了,于是这些问题就诞生了

我可不可以更简单一点??

于是我一开始直接定义起始引脚和终止引脚,用常量代替硬编码,让循环更简单方便

// 1. 定义宏常量,替代魔法数字
#define LED_START_PIN 8    // LED起始引脚
#define LED_END_PIN 11     // LED结束引脚
#define DELAY_TIME 500     // 延时时间(毫秒)

void setup() {
  // 2. 用常量替代硬编码,循环逻辑更清晰
  for (int pin = LED_START_PIN; pin <= LED_END_PIN; pin++) {
    pinMode(pin, OUTPUT);
  }
}

void loop() {
  // 3. 遍历LED引脚,实现依次亮灭
  for (int pin = LED_START_PIN; pin <= LED_END_PIN; pin++) {
    digitalWrite(pin, HIGH);
    delay(DELAY_TIME);
    digitalWrite(pin, LOW);
    // 4. 移除多余延时,避免非必要等待(可选优化,保持原功能则保留)
    // 若需和原代码完全一致,保留下方delay即可
    delay(DELAY_TIME);
  }
}

核心优化核心是消除魔法数字、提升语义化、封装复用逻辑,让代码更易读、易维护、易扩展;
基础优化(宏常量 + 语义化变量)已能满足大部分场景,进阶优化(封装函数)适合后续功能扩展;
优化后的代码不仅保留了原有的 LED 依次亮灭功能,还降低了后期修改和维护的成本,更符合工程化编程规范。

还有面包板为什么中间不连电??

因为一些面包板中间并不会通电,注意区分中间线路是否断裂
在这里插入图片描述

代码报错应该怎么检查??

针对性排查方法:① 从代码开头逐行回溯,优先核查宏定义、硬件初始化函数(如 setup ())、变量类型声明是否与后续逻辑匹配;② 注释掉后续可疑代码,仅运行排头初始化代码,通过串口打印或硬件指示灯验证初始化是否生效;③ 检查库引用、引脚映射是否存在冲突(如重复定义引脚),这类排头问题常导致后续代码隐性失效。

因为代码执行具有「顺序性」和「关联性」,排头代码(如宏定义、引脚初始化、变量声明、库引用)往往是后续代码的执行基础,若排头存在疏漏,错误可能不会在本行暴露,反而在后续调用时触发异常。例如:宏定义的引脚号写错,后续引脚控制代码本身无语法错误,但实际硬件无法响应;引脚初始化时遗漏某路输出配置,后续数字写入代码也会失效。

接下来,我们来调试for()循环

void setup()
{
  // for循环开始
  for(int i=8;i<=11;i++)
  {
    pinMode(i,OUTPUT); // 循环体:将引脚i设置为输出模式(用于控制LED)
  }
}

逐部分拆解:
初始化表达式:int i=8
定义一个临时循环变量i,初始值设为 8(对应第一个 LED 引脚 8),这个操作只执行 1 次。
条件判断表达式:i<=11
判断变量i是否小于等于 11(对应最后一个 LED 引脚 11),满足就执行循环体,不满足就退出循环。
更新表达式:i++
等价于i = i + 1,每次循环体执行完后,让i的值加 1,切换到下一个引脚。
循环体:pinMode(i,OUTPUT)
把当前i对应的引脚设置为输出模式(只有输出模式才能通过digitalWrite控制 LED 亮灭)。
这个 for 循环的运行流程(共执行 4 次):
初始化:i=8 → 判断8<=11(满足)→ 执行pinMode(8,OUTPUT)(引脚 8 设为输出)→ i++(i 变成 9);
判断9<=11(满足)→ 执行pinMode(9,OUTPUT)(引脚 9 设为输出)→ i++(i 变成 10);
判断10<=11(满足)→ 执行pinMode(10,OUTPUT)(引脚 10 设为输出)→ i++(i 变成 11);
判断11<=11(满足)→ 执行pinMode(11,OUTPUT)(引脚 11 设为输出)→ i++(i 变成 12);
判断12<=11(不满足)→ 退出 for 循环,setup()函数执行完毕。

void loop()
{
  // for循环开始
  for(int x=8;x<=11;x++)
  {
    digitalWrite(x,HIGH); // 让引脚x对应的LED点亮(高电平)
    delay(500); // 保持点亮500毫秒(0.5秒)
    digitalWrite(x,LOW); // 让引脚x对应的LED熄灭(低电平)
    delay(500); // 保持熄灭500毫秒(0.5秒)
  }
}

这里的 for 循环结构和setup()中一致,只是循环变量叫x(名字可自定义,和i功能一样),循环体是控制 LED 亮灭的逻辑。
这个 for 循环的运行流程(共执行 4 次,执行完后loop()会重复执行,所以 LED 会一直循环亮灭):
初始化:x=8 → 判断8<=11(满足)→ 执行digitalWrite(8,HIGH)(引脚 8 LED 亮)→ 延时 500ms → digitalWrite(8,LOW)(引脚 8 LED 灭)→ 延时 500ms → x++(x 变成 9);
判断9<=11(满足)→ 执行digitalWrite(9,HIGH)(引脚 9 LED 亮)→ 延时 500ms → digitalWrite(9,LOW)(引脚 9 LED 灭)→ 延时 500ms → x++(x 变成 10);
判断10<=11(满足)→ 执行digitalWrite(10,HIGH)(引脚 10 LED 亮)→ 延时 500ms → digitalWrite(10,LOW)(引脚 10 LED 灭)→ 延时 500ms → x++(x 变成 11);
判断11<=11(满足)→ 执行digitalWrite(11,HIGH)(引脚 11 LED 亮)→ 延时 500ms → digitalWrite(11,LOW)(引脚 11 LED 灭)→ 延时 500ms → x++(x 变成 12);
判断12<=11(不满足)→ 退出 for 循环;

总结

因为loop()函数会无限重复执行,所以会再次进入这个 for 循环,重新从 x=8 开始,实现 LED 循环依次亮灭。
for 循环的核心是「初始化→判断→执行循环体→更新变量」的循环流程,专门用于固定次数的重复操作;
你代码中的第一个 for 循环(setup () 内)仅执行一次,批量初始化引脚,替代了 4 次重复的 pinMode 语句;
第二个 for 循环(loop () 内)会无限重复,批量控制 LED 亮灭,实现了 4 个 LED 的依次循环闪烁效果,简化了重复的 digitalWrite 和 delay 语句。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值