如何将非原始对象数组写入 Arduino EEPROM,然后在每次程序启动时将该数组读入内存

How to write an array of non primitive objects to Arduino EEPROM then read the array into memory each time the program starts

我正在为 Electronics Final year 项目开发药丸提醒器。我需要存储药丸的名称、服用次数、服用时间以及目前是否有效。我如下创建了一个 class 药丸,并将药丸存储在一个数组中:

class Pill{
    public:
        String pillName = "Nothing";
        boolean pillTaken = true;
        int hours[6]; 
        boolean active = false;
        int count = 0; 
};

Pill pills[6];

现在我想将这些数据保存在 Arduino EEPROM 中,如何在每次程序启动时将药丸数组写入 EEPROM 并将数据读入内存。此外,每次收到修改药丸的命令时,我都需要更新数组,放入新值。

EEPROM.put(address, data) 让您可以在 EEPROM 中存储任何类型的数据。并且 EEPROM.get(address, data) returns 来自 EEPROM 的任何对象。

#include <EEPROM.h>
[...]
class Pill{
  public:
    String pillName = "Nothing";
    boolean pillTaken = true;
    int hours[6]; 
    boolean active = false;
    int count = 0; 
};
Pill pills[6];
//Assigning data to pills array in here...
[...]
EEPROM.put(address,pills)
[...]
//Getting saved pills array
Pill savedPills[]; //I'm not sure if you'd have to initialize the size...
EEPROM.get(address,savedPills)

您可以在 arduino.cc 中查看完整示例:

@Galarzaa90 已将您指向正确的信息,但是,EEPROM 库不适用于字符串 class。

为什么?

因为实际的字符串数据没有存储在对象内存中space,它只是包含一个指向其他地方的一些动态内存的指针。

如果您保存一个字符串对象,您将保存它的长度、缓冲区大小和指向数据的指针。然而,当你重新启动你的 duino 并从 EEPROM 加载字符串时,指针将指向......除了你期望的任何地方。

您需要使用 cstring/char 数组,这意味着字符串数据实际上存储在 Pill class.