如何使用 Arduino 更新 EEPROM 中的现有数据?
ArduinoUno具有1kB的EEPROM存储空间。EEPROM是一种非易失性存储器,即掉电后其内容仍会保留。因此,它可用于存储您希望跨电源循环保持不变的数据。配置或设置是此类数据的示例。
在本文中,我们将看到如何更新EEPROM中的现有数据。我们将介绍Arduino中的一个内置示例。可以从以下位置访问EEPROM示例:文件→示例→EEPROM。
示例
我们将查看eeprom_update示例。您基本上使用该功能。该功能的不同之处在于,只有当新值与该地址中已存储的值不同时,它才会覆盖EEPROM中的值。为什么?因为每个EEPROM每个地址的写周期数(~100,000)是有限的。如果我们在任何地址位置不断覆盖相同的值,就会缩短EEPROM的使用寿命。EEPROM.update()EEPROM.update()EEPROM.write()
我们从包含库开始。
#include
接下来,我们为地址定义一个全局变量。设置中没有任何反应。
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,并仅在新值与读取值不同时才写入该地址。