如何使用 Arduino 更新 EEPROM 中的现有数据?

Arduino Uno 具有 1 kB 的 EEPROM 存储空间。EEPROM 是一种非易失性存储器,即掉电后其内容仍会保留。因此,它可用于存储您希望跨电源循环保持不变的数据。配置或设置是此类数据的示例。

在本文中,我们将看到如何更新 EEPROM 中的现有数据。我们将介绍 Arduino 中的一个内置示例。可以从以下位置访问 EEPROM 示例:文件 → 示例 → EEPROM

示例

我们将查看eeprom_update示例。您基本上使用该功能。该功能的不同之处在于,只有当新值与该地址中已存储的值不同时,它才会覆盖 EEPROM 中的值。为什么?因为每个 EEPROM 每个地址的写周期数(~100,000)是有限的。如果我们在任何地址位置不断覆盖相同的值,就会缩短 EEPROM 的使用寿命。EEPROM.update()EEPROM.update()EEPROM.write()

我们从包含库开始。

#include <EEPROM.h>

接下来,我们为地址定义一个全局变量。设置中没有任何反应。

int address = 0;
void setup() {
   /** EMpty setup **/
}

在循环中,我们从模拟输入(本例中为 A0)读取值,并使用. update()功能。然后我们增加地址并重复此操作。如果我们到达 EEPROM 长度的末尾,我们将返回到开头(addr = 0)。

请注意,我们将模拟读取输出除以 4,因为一个字节的值只能从 0 到 255,而analogRead()输出值的范围从 0 到 1023。

void loop() {
   int val = analogRead(A0) / 4;
   EEPROM.update(address, val);
   /***
      The function EEPROM.update(address, val) is equivalent to the following:
      if( EEPROM.read(address) != val ){
         EEPROM.write(address, val);
      }
   ***/
   address = address + 1;
   if (address == EEPROM.length()) {
      address = 0;
   }
   delay(100);
}

正如评论中提到的,. update()函数等效于读取该地址处的 EEPROM,并仅在新值与读取值不同时才写入该地址。