2016-04-25 6 views
2

Я разрабатываю напоминание о таблетках для проекта «Финальный год для электроники». Мне нужно сохранить название таблетки, количество раз, которое она берется, часы, которые он принимает во время и активен ли он в настоящее время. Я создал класс таблетки, как показано ниже, и хранить таблетки в массиве:Как написать массив не примитивных объектов в EEPROM Arduino, затем прочитать массив в памяти каждый раз, когда запускается программа.

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

Pill pills[6]; 

Теперь я хочу, чтобы сохраняться эти данные в Arduino EEPROM, как я могу писать массив таблеток в EEPROM и читать данные в память при каждом запуске программы. Кроме того, мне нужно обновлять массив каждый раз, когда команда для изменения таблетки принимается, вводя новые значения.

+0

Не уверен, что вы получили ответ на комментарий, который вы опубликовали в моем ответе. Я не @ ваше имя, поэтому это сообщение должно дать вам уведомление. –

ответ

2

@ Galarzaa90 указал вам нужную информацию, однако, EEPROM Lib будет не работает с классом String.

Почему?

Поскольку фактические данные String не хранятся в пространстве памяти объектов, он просто содержит указатель на некоторую динамическую память в другом месте.

Если вы сохраните объект String, вы сохраните его длину, размер буфера и указатель на данные. Однако, когда вы перезагружаете свое дуо и загружаете String из EEPROM, указатель будет указывать на ... везде, где вы ожидаете.

Вам понадобится массив cstring/char, который означает, что строковые данные фактически хранятся внутри класса Pill.

+0

Могу ли я сохранить переменную 'pillName' в качестве массива символов и прочитать ее обратно в' String', потому что мне нужно использовать функциональность String? Мое решение состояло в том, чтобы создать другой класс, который хранит имя в виде массива и сохраняет его в EEPROM, затем читает и копирует информацию в мой класс 'pills' –

+0

Вы не можете прочитать его напрямую, однако если' pillName' it это строка с нулевым завершением, вы можете сделать что-то вроде этого: 'String myString = pillName;' однажды 'pillName' был загружен из EEPROM. –

+0

Мне пришлось добавить '\ 0' в качестве последнего символа для его работы, и это сработало. Я не уверен, что это путь? –

2

EEPROM.put(address, data) давайте вам хранить любые данные в EEPROM. И EEPROM.get(address, data) возвращает любой объект из 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:

+0

Правильно, как может показаться ваш ответ, он не будет работать со строками. Правильная информация. –

 Смежные вопросы

  • Нет связанных вопросов^_^