Arduino & IoT Academy · 课时

复位后保留计数器数值

让状态在多次通电之间持久保存

第 4 / 4 课13 个步骤

复位后保留计数器数值 是 CoddyKit 上的免费 Arduino & IoT Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Arduino & IoT Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Arduino & IoT Academy 课程共包含 4 节课。

不会丢失的计数器

让我们构建一个按下计数器,即使断电后也能记住总次数。我们会将消抖与 EEPROM 存储结合起来。

一行说明计划

启动时,加载已保存的计数值。每次干净的按下信号出现时,将计数加一并保存回去。简单,却很强大。

选择存储槽

为计数器预留一个 EEPROM 地址。目前我们会让计数值足够小,使其可以放入单个字节。

const int ADDR = 0;
byte count = 0;

启动时加载

在 setup() 中,先读取已保存的值。这样,计数器就能准确地从上次停止的位置继续计数。

void setup() {
  count = EEPROM.read(ADDR);
}

先清除无效数据

新芯片的 EEPROM 通常会读出 255。请将它视为空值,并在首次运行时将计数器重置为零。

if (count == 255) count = 0;

复用消抖逻辑

使用之前介绍的 millis() 消抖来检测按下信号。干净的输入至关重要,否则保存的计数值会不断偏大。

在干净的按下信号出现时递增

当经过消抖的按下信号触发时,将计数器加一。这是您的总数增加的唯一时刻。

count++;
Serial.println(count);

保存数据而不损耗内存

使用 EEPROM.update 写入新的总数。只有值确实发生变化时,它才会操作内存,从而保护芯片。

EEPROM.update(ADDR, count);

测试这个魔法

按几次按钮,然后拔下并重新插上开发板。串口监视器会显示计数值继续累加,而不是重新开始。🎉

注意字节限制

字节计数器达到 255 后会回到 0。对于更大的总数,请改用 EEPROM.put 和 EEPROM.get 存储 int。

添加重置选项

真正的产品通常需要提供清除已保存计数值的方法。长按按钮可以将 0 写回 EEPROM。

EEPROM.update(ADDR, 0);

快速检查

让我们检查一下,哪一个关键步骤使计数器能够在重置后继续工作。

回顾:跨越重置保存内存

您构建了一个能够持久保存的计数器:启动时从 EEPROM 加载数据,并在每次干净的按下信号后保存。您的设备终于拥有记忆了!🧠

免费开始

用 AI 导师学习 C++ — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
30
课程
120

常见问题解答

「复位后保留计数器数值」课时是免费的吗?

是的 — 「复位后保留计数器数值」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Arduino & IoT Academy 课程的其余内容,请升级到 CoddyKit PRO。 Arduino & IoT Academy 课程共包含 4 节课。

「复位后保留计数器数值」这节课中我会学到什么?

让状态在多次通电之间持久保存 你通过在浏览器中直接运行的动手代码来练习 Arduino & IoT Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Arduino & IoT Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Arduino & IoT Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「复位后保留计数器数值」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Arduino & IoT Academy 课中编写并运行代码吗?

能。每节 Arduino & IoT Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 按钮为什么会“抖动”
  2. 使用 millis() 消抖
  3. 将数值存入 EEPROM
  4. 复位后保留计数器数值
← 返回 Arduino & IoT Academy