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,并仅在新值与读取值不同时才写入该地址。