2016-04-25 6 views
2

エレクトロニクス最終年度プロジェクトのためのピルリマインダーを開発中です。私は、錠剤の名前、それが取られた回数、それが取られている時間、およびそれが現在アクティブであるかどうかを記憶する必要がある。私は以下のようにクラスの丸薬を作成し、配列に錠剤を保存:非プリミティブオブジェクトの配列をArduino EEPROMに書き込んで、プログラムが起動するたびにメモリに配列を読み込む方法

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

Pill pills[6]; 

今、私はEEPROMに錠剤の配列を書き込むことができますどのように、ArduinoのEEPROMにこのデータを永続化したいデータを読み込みますプログラムが起動するたびにメモリに保存されます。また、ピルを変更するコマンドが受け取られるたびに新しい値を入れて配列を更新する必要があります。

+0

回答に投稿したコメントに対して自分の返信があるかどうか不明です。私は@あなたの名前ではなかったので、このメッセージはあなたに通知を与えるはずです。 –

答えて

2

は、しかし、正しい情報にEEPROM libの意志をあなたを指摘していますStringクラスでは動作しません。

なぜですか?

実際のStringデータはオブジェクトのメモリ空間に格納されないため、他の場所の動的メモリへのポインタが含まれているだけです。

Stringオブジェクトを保存すると、その長さ、バッファサイズ、ポインタをデータに保存します。しかし、あなたがduinoを再起動してEEPROMから文字列を読み込むと、ポインタは...どこにでもありますが、あなたが期待している場所を指しています。

文字列データが実際にPillクラスの内部に格納されていることを意味するcstring/char配列を使用する必要があります。

+0

文字列の機能を使用する必要があるため、 'pillName'変数をchar配列として格納し、それを' 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で、完全な例を確認することができます。

Galarzaa90 @
+0

あなたの答えが正しいように、文字列では機能しません。しかし、右の情報。 –

関連する問題