如何使用Arduino从EEPROM中获取任意大小的数据?
Arduino Uno 具有 1 kB 的 EEPROM 存储空间。EEPROM 是一种非易失性存储器,即掉电后其内容仍会保留。因此,它可用于存储您希望跨电源循环保持不变的数据。配置或设置是此类数据的示例。
在本文中,我们将看到如何从 EEPROM 中获取任意大小(不仅仅是一个字节)的数据。我们将介绍 Arduino 中的一个内置示例。可以从 -文件 → 示例 → EEPROM访问 EEPROM 示例。
示例
我们将查看eeprom_get示例。此示例假设您已通过运行eeprom_put示例中的代码预先设置了 Arduino 的 EEPROM 中的数据。换句话说,eeprom_put示例是该示例的前身。
感兴趣的主要功能是。它需要两个参数,开始读取数据的起始地址,以及存储读取数据的变量(可以是原始类型,如float或自定义struct)。其他基本数据类型的示例有short、int、long、char、double等。此函数根据要存储读取数据的变量的大小确定要读取的字节数。EEPROM.get()
我们从包含库开始。
#include <EEPROM.h>
代码中稍后定义了一个全局结构。
struct MyObject {float field1;
byte field2;
char name[10];
};
在 Setup 中,我们首先初始化 Serial,然后从 EEPROM 的开头(地址 = 0)读取一个浮点数。然后我们在函数中读取一个结构体secondTest()(我们首先将 EEPROM 读取地址移动一个浮点数的大小,然后创建一个struct类型的对象,并读入它。然后我们将结构体中的字段一一打印出来。
void setup() {float f = 0.00f; //存储从 EEPROM 读取的数据的变量。
int eeAddress = 0; //开始读取的 EEPROM 地址
Serial.begin(9600);
while (!Serial) {
; //等待串口连接。仅本地 USB 端口需要
}
Serial.print("从 EEPROM 读取浮点数: ");
//从 EEPROM 的 'eeAddress' 位置获取浮点数据 EEPROM.get(eeAddress, f);
Serial.println(f, 3); //如果 EEPROM 中的数据不是有效的浮点数,这可能会打印 'ovf, nan'。
/***
As get also returns a reference to 'f', you can use it inline.
E.g: Serial.print( EEPROM.get( eeAddress, f ) );
***/
/***
Get can be used with custom structures too.
I have separated this into an extra function.
***/
secondTest(); //运行下一个测试。
}
void secondTest() {
int eeAddress = sizeof(float); //将地址移动到 float 'f' 之后的下一个字节。
MyObject customVar; //用于存储从 EEPROM 读取的自定义对象的变量。
EEPROM.get(eeAddress, customVar);
Serial.println("从 EEPROM 读取自定义对象: ");
Serial.println(customVar.field1);
Serial.println(customVar.field2);
Serial.println(customVar.name);
}
循环中什么也没有发生。
void loop() {/* Empty loop */
}
以上是 如何使用Arduino从EEPROM中获取任意大小的数据? 的全部内容, 来源链接: utcz.com/z/354416.html