为什么 delay() 会阻塞一切
了解暂停如何让开发板停止响应
为什么 delay() 会阻塞一切 是 CoddyKit 上的免费 Arduino & IoT Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Arduino & IoT Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Arduino & IoT Academy 课程共包含 4 节课。
简单的暂停
delay 函数会让草图暂停指定的毫秒数。这是减慢运行速度、让闪烁变得可见的最简单方法。
delay(1000);1000 的含义
delay(1000) 会等待整整一秒,因为数值的单位是毫秒。因此,delay(500) 是半秒,delay(2000) 是两秒。
它会让开发板停滞
问题在于:delay 会冻结一切。在等待期间,您的开发板完全不会执行其他操作,就像一个屏住呼吸的人一样。😮
错过按钮按下操作
在执行delay期间,您的开发板无法察觉按钮按下操作。如果您在暂停期间点击按钮,这次操作会直接被忽略,用户会觉得设备出了问题。
看看问题所在
这里两次检查之间有一个一秒的delay,因此在这一整秒内发生的任何按键操作,都会在下一次读取前丢失。
digitalRead(buttonPin);
delay(1000);一次只能执行一个任务
由于delay会阻塞程序,您无法同时让 LED 闪烁并监视传感器。整个草图会作为一个任务一起等待。
连续暂停会累积
连续调用两次delay时,等待时间会直接相加。如果到处都加入暂停,您的开发板大部分时间都会处于冻结且无响应的状态。
适合简单的草图
delay并不可怕。如果程序只需要让一个 LED 闪烁,没有其他操作,那么使用它既清晰又完全没问题。
真正的目标
真正的目标是编写非阻塞草图:在计时事件的同时继续响应操作。也就是说,不要用长时间暂停冻结循环。
换个角度思考时间
您可以不暂停,而是检查已经过去了多少时间,只在经过足够时间后执行操作。在此期间,循环会继续运行。
更好的工具即将登场
很快您就会接触到millis。这是一个能够测量经过时间而不会冻结程序的时钟,真实项目正是借此保持响应能力。
快速检查
在草图中使用 delay 的主要缺点是什么?
回顾
您已经看到,delay虽然简单,却会冻结开发板,导致错过输入并阻塞其他任务。接下来,您将学习如何在不停止循环的情况下为事件计时。✨
用 AI 导师学习 C++ — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 30
- 课程
- 120
常见问题解答
「为什么 delay() 会阻塞一切」课时是免费的吗?
是的 — 「为什么 delay() 会阻塞一切」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Arduino & IoT Academy 课程的其余内容,请升级到 CoddyKit PRO。 Arduino & IoT Academy 课程共包含 4 节课。
「为什么 delay() 会阻塞一切」这节课中我会学到什么?
了解暂停如何让开发板停止响应 你通过在浏览器中直接运行的动手代码来练习 Arduino & IoT Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Arduino & IoT Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Arduino & IoT Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「为什么 delay() 会阻塞一切」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Arduino & IoT Academy 课中编写并运行代码吗?
能。每节 Arduino & IoT Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Arduino 中的 int、float、bool
- 为什么 delay() 会阻塞一切
- 使用 millis 不调用 delay 实现闪烁
- 同时运行两项任务