2016-04-25 13 views
2

Ich entwickle eine Pille Erinnerung für Electronics Final Year Projekt. Ich muss den Namen der Pille, die Anzahl der Einnahmepunkte, die Stunden, in denen sie eingenommen wird, und ob sie gerade aktiv sind oder nicht, speichern. Ich habe eine Klasse Pille wie unten, und die Pillen in einem Array gespeichert:Wie schreibe ich ein Array von nicht primitiven Objekten auf Arduino EEPROM dann lesen Sie das Array in den Speicher jedes Mal, wenn das Programm startet

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

Pill pills[6]; 

Jetzt möchte ich in der Arduino EEPROM diese Daten bestehen bleiben, wie kann ich das Array von Pillen in den EEPROM schreiben und lesen die Daten in den Speicher jedes Mal, wenn das Programm startet. Außerdem muss ich das Array jedes Mal aktualisieren, wenn ein Befehl zum Ändern einer Pille empfangen wird, und die neuen Werte eingeben.

+0

Nicht sicher, ob Sie meine Antwort auf den Kommentar erhalten haben, den Sie auf meine Antwort geschrieben haben. Ich habe Ihren Namen nicht angegeben, daher sollte diese Nachricht Ihnen eine Benachrichtigung senden. –

Antwort

2

@ Galarzaa90 Sie auf die richtigen Informationen hingewiesen hat, jedoch der EEPROM lib wird nicht mit der String-Klasse arbeiten.

Warum?

Da die tatsächlichen String-Daten nicht im Speicherbereich der Objekte gespeichert sind, enthält sie einfach einen Zeiger auf einen anderen dynamischen Speicher.

Wenn Sie ein String-Objekt speichern, werden Länge, Puffergröße und Zeiger auf Daten gespeichert. Wenn Sie jedoch Ihren Duino neu starten und die Zeichenfolge aus dem EEPROM laden, zeigt der Zeiger auf ... wo auch immer Sie sich befinden.

Sie müssen ein cstring/char-Array verwenden, was bedeutet, dass die String-Daten tatsächlich in der Pill-Klasse gespeichert sind.

+0

Kann ich die Variable 'pillName' als Char-Array speichern und in eine' String' zurücklesen, weil ich die Funktionalität des Strings verwenden muss? Meine Lösung bestand darin, eine andere Klasse zu erstellen, die den Namen als Array speichert und im EEPROM speichert, sie dann liest und die Informationen in meine 'Pillen'-Klasse kopiert –

+0

Sie können es nicht direkt lesen, jedoch wenn' pillName' es ist ist ein Null-terminierter String, können Sie etwas wie folgt tun: 'String myString = pillName;' sobald 'pillName' aus dem EEPROM geladen wurde. –

+0

Ich musste ein '\ 0' als letztes Zeichen hinzufügen, damit es funktionierte, und es funktionierte. Ich bin mir nicht sicher, ob das der richtige Weg ist? –

2

EEPROM.put(address, data) können Sie alle Arten von Daten im EEPROM speichern. Und EEPROM.get(address, data) gibt jedes Objekt aus dem EEPROM zurück.

#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) 

können Sie prüfen, komplette Beispiele in arduino.cc:

+0

So korrekt wie Ihre Antwort scheint, wird es nicht mit Strings funktionieren. Richtig Info aber. –