一个 LED,三种信息
将已能运行的 LED 改造成清晰的状态指示器。设计三种信号,测试同伴能否识别,再依据证据改进其中一种。
本课资料
读代码,观察灯光。
选择起始模式。播放以同时观察代码与灯光,或使用单步功能在每个延时处暂停。可使用这些示例,也可改编成自己的三种信息。
已停止。选择信息,再按“播放”。
LED 在以下期间保持原状态: delay()。程序等待时,灯不会自动熄灭。
已开启减少动态效果。请使用单步功能查看各部分,避免定时闪烁。
跟随指令
已停止void showReady() {ledOn();delay(1000);ledOff();}
showReady();调用函数delay(3000);然后保持熄灯并等待从 loop() 中的函数调用开始。程序运行指定函数,再返回下一行。
ledOn() 与 ledOff() 表示你自己的可用 LED 指令。下方框架说明如何填写。
- 1亮 · 1000 毫秒
- 2灭 · 3000 毫秒 · 信息之间
1000 毫秒(ms)= 1 秒。此处短闪持续 250 毫秒,即四分之一秒。
一盏灯,清晰传达信息。
某设备只有一盏灯,没有屏幕。选择一种设备及其用户,为“就绪”“运行中”和“需要注意”设计信号。这些是假设的设备状态:程序决定显示哪种信息,并不会感测设备状态或连接互联网。
代码能运行,但用户看得懂吗?
制作 → 测试 → 改进
- 010–5 分钟
从可用程序开始
运行最近成功的闪烁程序并保存备份,保持原来有效的电路和设置。
- 025–10 分钟
选择设备和用户
选择一种设备,例如教室打印机、充电站或桌面助手。说明谁使用它,以及为什么需要这三种信息。
- 0310–17 分钟
规划信号指南
规划“就绪”“运行中”和“需要注意”信号。记录每种模式、每次亮灭时长(毫秒),并解释为什么应该容易区分。示例可直接使用,也可改编。
- 0417–30 分钟
编写三个命名函数
将各模式放入 showReady()、showWorking() 或 showAttention(),从 loop() 调用,并逐一测试。每个信号都以熄灯结束,信息之间统一保留三秒熄灯间隔。
- 0530–34 分钟
准备公平的测试
教同伴使用信号指南并练习。准备每种信息各出现两次的混合序列。保持指南可见,但隐藏代码和信息顺序。上传一次,先观察一轮练习。该轮结束后的十秒长熄灯间隔一过,立即开始计分测试第 1 次。
- 0634–42 分钟
记录六次识别测试
每次记录预期信息、同伴回答及困惑或犹豫。测试期间不要指导。统计六次中答对的次数,诚实结果比满分更重要。
- 0742–49 分钟
修改并复测
根据观察修改一个时长或模式特点。如果所有信号都清晰,可预测一项有用改进,例如缩短信号。说明预测,再以不同混合顺序测试六次,记录识别效果变好、不变还是变差。
- 0849–55 分钟
保存并解释
保存最终程序、信号指南、两份测试记录及解释。向教师展示有效信号,或录制短视频。共用开发板时,保留自己的代码和证据。
为每种信息命名
函数让你为一组指令命名,再让程序运行它。你已经有可用的 LED 开关指令,今天将把它们组合成信息。
void showReady() {
// Instructions for the ready signal
}定义说明要执行什么。
showReady();调用会运行这些指令,然后继续下一行。
不熟悉这些代码术语?阅读快速指南。
- 函数
- 一组有名称的指令。void showReady() { ... } 定义函数做什么;showReady(); 调用函数,程序执行这些指令后返回下一行。
- void
- 该函数执行指令,但不返回值。
- 花括号与分号
- 花括号 { } 包含函数指令。showReady(); 这样的函数调用以分号结束。新函数应写在 setup() 和 loop() 外部,不能写进它们的花括号中。
- delay
- delay(1000); 暂停程序 1000 毫秒,即一秒。亮灯后的延时控制持续发光的时长,熄灯后的延时控制黑暗的时长。
- setup 与 loop
- 保留现有 setup() 和引脚声明。setup() 在程序启动时执行一次;loop() 反复执行,因此六条信息的测试轮次也会重复。
起始代码
上传前填写两个辅助函数
ledOn() 与 ledOff() 下方为空。只有把以下来源中准确的 LED 开启和关闭指令复制进去,它们才能控制 LED:你自己的可用程序。保留引脚声明及 setup()。替换原来的 loop();不要再添加第二个。
- 保留成功闪烁程序中的引脚声明和 setup(),删除旧 loop(),再将完整代码块粘贴到 setup() 的结束花括号后。
- 将现有 LED 开启语句复制到 ledOn(),关闭语句复制到 ledOff()。这些空辅助函数在填写前不起作用。例如,只有当 digitalWrite(LED, HIGH); 已经是有效的开启指令时才复制它。保留自己的引脚名称和开关电平。
- 检查只有一个 setup() 和一个 loop()。保存、验证并上传。看完一轮练习后,在十秒长熄灯间隔结束时立即开始计分测试第 1 次。
- 根据设计调整信号时长。第二次测试时重新排列六次调用,让每种仍出现两次。保留五个 3000 毫秒间隔,以及最后用于结束该轮的 10000 毫秒间隔。
// Keep your existing pin declarations and setup() unchanged.
// Do not add a second setup() or a second loop().
// Add these two small helper functions OUTSIDE setup() and loop().
void ledOn() {
// Paste the exact LED ON instruction from your working sketch here.
}
void ledOff() {
// Paste the exact LED OFF instruction from your working sketch here.
}
// Each signal function ends with the light OFF.
void showReady() {
ledOn();
delay(1000);
ledOff();
}
void showWorking() {
ledOn(); delay(250);
ledOff(); delay(250);
ledOn(); delay(250);
ledOff(); delay(250);
ledOn(); delay(250);
ledOff();
}
void showAttention() {
ledOn(); delay(250);
ledOff(); delay(250);
ledOn(); delay(250);
ledOff(); delay(250);
ledOn(); delay(1000);
ledOff();
}
// REPLACE your old loop() with this one.
// Each message occurs twice. Hide this order from your partner.
void loop() {
showWorking(); delay(3000);
showReady(); delay(3000);
showAttention(); delay(3000);
showReady(); delay(3000);
showAttention(); delay(3000);
showWorking(); delay(10000); // Longer darkness ends the test round.
}
将这些函数复制到可用程序中。这个框架不能直接替换整个程序。
可以请 AI 帮助将现有可用代码组织为函数,要求保留 LED 引脚、开发板设置和开关指令。自己检查结果,并准备解释一次函数调用和一个延时。
测试信息表达,而不是记忆力
指南可见
教同伴识别信号并练习,将信号指南放在他们看得见的位置。
顺序隐藏
以混合顺序让每种信息出现两次,隐藏代码和序列,不要指导同伴。
修改后再测试
根据观察或预测修改一个特点,再用不同混合顺序测试六条信息。
明确各轮边界: 练习后等待十秒熄灯间隔,下一个信号即第 1 次测试。信息之间保持三秒熄灯,第六条后保持十秒。较长间隔告知同伴该轮已结束。
每次测试都记录以下内容
使用学习单中的表格,比较修改前后六次测试的正确次数。诚实结果比满分更重要。
课堂任务分数
每行展示了证据得 1 分,尚未展示得 0 分,总分 8 分。这是形成性课堂任务分数,不是官方 MYP 评估标准等级。识别结果不必六次全对,修改也不必改善结果才能得分。请解释实际发生的情况。
- 11 分
目的与信号指南
写明设备和用户,记录三种信息的模式及时长。
- 21 分
三个有效信号
在自己的或共用的可用设备上演示三种计划模式,每种时序或闪烁序列有所不同,信息之间保留熄灯间隔。
- 31 分
代码组织
使用三个命名信号函数,从 loop() 调用。允许使用代码框架或 AI 辅助。
- 41 分
解释代码
用书面或口头方式,正确解释自己代码中的一次函数调用和一个延时值。
- 51 分
首次测试记录
记录六条预期信息、六个同伴回答和至少一项具体观察。指南可见,顺序隐藏。
- 61 分
有依据的修改
更改一个时长或模式特点,解释首次测试或明确的预测为什么支持这项修改。
- 71 分
复测与比较
以不同混合顺序再记录六次测试,诚实比较两次结果,解释结果说明了什么。
- 81 分
完整证据
保存最终 .ino 代码、指南、两份测试记录,以及演示或教师确认。
将证据保存在一起
- 包含 .ino 文件的最终程序文件夹
- 附时长的信号指南
- 两份各六次的测试记录,以及有依据的修改
- 教师现场确认的演示或短视频
准备解释
“我们修改了 ______,因为 ______。第二次测试中,______。这说明 ______。”
在线阅读学习资料正文
一颗 LED,三种信息
十年级设计 | 2026 年 9 月 23 日 | 55 分钟 | 任务满分 8 分
将已能运行的 LED 改造成清晰的状态指示器。设计三种信号,测试同伴能否识别,再依据证据改进其中一种。
姓名 __________________________________ 班级 __________ 日期 ______________
从可用的闪烁程序开始
使用现有且可正常工作的 ESP32、电脑和 LED 配置。保持接线、LED 引脚、开关指令和已验证的开发板设置,不需要额外元件或新接线。
运行最近成功的闪烁程序,保存备份,再创建 G10_Three_Messages_Name。保留外接 LED 电路中已有的限流电阻。如果设备停止工作,请询问教师,并在可用的共用设备上测试自己的代码。
设计状态指示灯
某设备只有一盏灯,没有屏幕。选择一种设备及其用户,为“就绪”“运行中”和“需要注意”设计信号。这些是假设的设备状态:程序决定显示哪种信息,并不会感测设备状态或连接互联网。
我的设备及其用户
________________________________________________________________________________
这位用户为什么需要这些信息?
________________________________________________________________________________
规划信号指南
记录闪烁及每次亮灭时长。单位为毫秒:1000 毫秒 = 1 秒。让模式容易区分,每种都以 LED 熄灭结束。
| 信息 | 闪烁模式及亮灭时长(毫秒) |
| 就绪 | |
| 运行中 | |
| 需要注意 |
起始构思:一次长闪;三次短闪;两次短闪后一次长闪。代码框架中长闪为 1000 毫秒,短闪和内部熄灯间隔为 250 毫秒。你可以调整。
今日安排:0–5 分钟备份 / 5–10 分钟设备和用户 / 10–17 分钟计划 / 17–30 分钟编程 / 30–34 分钟准备测试 / 34–42 分钟测试 / 42–49 分钟修改并复测 / 49–55 分钟保存
用函数构建信号
函数为一组指令命名,写出名称即可运行这组指令。每种信息使用一个函数,让程序更易读、易改。
函数:一组有名称的指令。void showReady() { ... } 定义函数做什么;showReady(); 调用函数,程序执行这些指令后返回下一行。
void:该函数执行指令,但不返回值。
花括号与分号:花括号 { } 包含函数指令。showReady(); 这样的函数调用以分号结束。新函数应写在 setup() 和 loop() 外部,不能写进它们的花括号中。
delay:delay(1000); 暂停程序 1000 毫秒,即一秒。亮灯延时控制持续发光的时长,熄灯延时控制黑暗的时长。
setup 与 loop:保留现有 setup() 和引脚声明。setup() 在程序启动时执行一次;loop() 反复执行,因此六条信息的测试轮次也会重复。
使用下一页的代码框架
1. 保留成功闪烁程序中的引脚声明和 setup(),删除旧 loop(),再将完整代码块粘贴到 setup() 的结束花括号后。
2. 将现有 LED 开启语句复制到 ledOn(),关闭语句复制到 ledOff()。这些空辅助函数在填写前不起作用。例如,只有当 digitalWrite(LED, HIGH); 已经是有效的开启指令时才复制它。保留自己的引脚名称和开关电平。
3. 检查只有一个 setup() 和一个 loop()。保存、验证并上传。看完一轮练习后,在十秒长熄灯间隔结束时立即开始计分测试第 1 次。
4. 根据设计调整信号时长。第二次测试时重新排列六次调用,让每种仍出现两次。保留五个 3000 毫秒间隔,以及最后用于结束该轮的 10000 毫秒间隔。
两个辅助函数 ledOn() 和 ledOff() 也是有名称的小指令组,各自包含你自己的可用指令。通过这些名称,信号函数可以使用硬件,而无需猜测引脚或开关电平。
检查理解
从代码中选一次函数调用。程序执行到此处时会发生什么?
________________________________________________________________________________
________________________________________________________________________________
选择一个延时值。它是多少毫秒?此时灯是亮还是灭?
________________________________________________________________________________
________________________________________________________________________________
可以请 AI 帮助将现有可用代码组织为函数,要求保留 LED 引脚、开发板设置和开关指令。自己检查结果,并准备解释一次函数调用和一个延时。
信号代码框架参考
这是现有程序的一部分,不能替换完整文件。保留引脚声明和 setup(),删除旧 loop(),粘贴代码块,再填写两个空辅助函数。
// 保持现有引脚声明和 setup() 不变。
// 不要再添加第二个 setup() 或 loop()。
// 将这两个小辅助函数添加在 setup() 和 loop() 外部。
void ledOn() {
// 在此粘贴可用程序中准确的 LED 开启指令。
}
void ledOff() {
// 在此粘贴可用程序中准确的 LED 关闭指令。
}
// 每个信号函数都以熄灯结束。
void showReady() {
ledOn();
delay(1000);
ledOff();
}
void showWorking() {
ledOn(); delay(250);
ledOff(); delay(250);
ledOn(); delay(250);
ledOff(); delay(250);
ledOn(); delay(250);
ledOff();
}
void showAttention() {
ledOn(); delay(250);
ledOff(); delay(250);
ledOn(); delay(250);
ledOff(); delay(250);
ledOn(); delay(1000);
ledOff();
}
// 用这个 loop() 替换旧版本。
// 每种信息出现两次。不要让同伴看到此顺序。
void loop() {
showWorking(); delay(3000);
showReady(); delay(3000);
showAttention(); delay(3000);
showReady(); delay(3000);
showAttention(); delay(3000);
showWorking(); delay(10000); // 较长的熄灯间隔标志该轮测试结束。
}
3000 毫秒的熄灯间隔分隔各条信息。第六条信息后,10000 毫秒的熄灯标志该轮结束,之后 loop() 重复运行。先练习一轮,再在长熄灯间隔结束时立即开始计分测试第 1 次。
在线课程及可复制代码:mistera.tech/curriculum/lessons/grade-10-one-led-three-messages/
与同伴测试信号
向同伴展示指南并练习一次。保持指南可见,隐藏代码和顺序。每轮有六条混合顺序的信息,每种出现两次。十秒长熄灯间隔结束后开始第 1 次测试,不要指导同伴。至少记录一项具体观察。
同伴 ______________________________;首次测试答对 ______ / 6
| 试验 | 预期信息 | 同伴回答 | 犹豫或困惑 |
| 1 | |||
| 2 | |||
| 3 | |||
| 4 | |||
| 5 | |||
| 6 |
修改一个时长或模式特点。你改了什么?为什么?
________________________________________________________________________________
________________________________________________________________________________
用首次测试中的观察论证修改。如果所有信号都清晰,预测一项有用改进,例如缩短信号,再测试该预测。
以不同混合顺序复测
保持指南可见,隐藏新顺序。每种信息仍出现两次。
| 试验 | 预期信息 | 同伴回答 | 犹豫或困惑 |
| 1 | |||
| 2 | |||
| 3 | |||
| 4 | |||
| 5 | |||
| 6 |
复测答对 ______ / 6。识别效果:更好 / 相同 / 更差。
结果说明你的修改带来了什么?
________________________________________________________________________________
展示所学
最后六分钟保存最终程序、信号指南、两份测试记录和解释。向教师展示三个有效信号,或录制短视频。共用开发板时,保留自己的代码和证据。
你的任务分数(满分 8 分)
每行展示了证据得 1 分,尚未展示得 0 分,总分 8 分。这是形成性课堂任务分数,不是官方 MYP 评估标准等级。识别结果不必六次全对,修改也不必改善结果才能得分。请解释实际发生的情况。
| 展示内容 | 获得 1 分所需的证据 | 分数 |
| 目的与信号指南 | 写明设备和用户,记录三种信息的模式及时长。 | / 1 |
| 三个有效信号 | 在自己的或共用的可用设备上演示三种计划模式,每种时序或闪烁序列有所不同,信息之间保留熄灯间隔。 | / 1 |
| 代码组织 | 使用三个命名信号函数,从 loop() 调用。允许使用代码框架或 AI 辅助。 | / 1 |
| 解释代码 | 用书面或口头方式,正确解释自己代码中的一次函数调用和一个延时值。 | / 1 |
| 首次测试记录 | 记录六条预期信息、六个同伴回答和至少一项具体观察。指南可见,顺序隐藏。 | / 1 |
| 有依据的修改 | 更改一个时长或模式特点,解释首次测试或明确的预测为什么支持这项修改。 | / 1 |
| 复测与比较 | 以不同混合顺序再记录六次测试,诚实比较两次结果,解释结果说明了什么。 | / 1 |
| 完整证据 | 保存最终 .ino 代码、指南、两份测试记录,以及演示或教师确认。 | / 1 |
总分 ______ / 8
保存包含 .ino 文件的最终程序文件夹、本指南与测试记录,以及演示或教师确认。今天没有额外硬件任务。
我现在能独立解释或完成的一件事
________________________________________________________________________________
________________________________________________________________________________
教师反馈或下一步
________________________________________________________________________________
________________________________________________________________________________