I am fairly new to Arduino programming and working on a project where I'm looking to store the variables in the eeprom so I can recall them after reboots. I'm trying to run it on a elegoo uno r3.
First I am uploading the variable structures via a put sketch (below)
/*
Used to first set up struct for eeprom storage
*/
#include <EEPROM.h>
//User Changed Variables Structure
struct Stored_Variables {
String Name;
int Value;
};
Stored_Variables Number_Input = { "Number Input", 10 };
Stored_Variables Pistol_Default = { "Pistol Default", 26 };
Stored_Variables Rifle_Default = { "Rifle Default", 100 };
Stored_Variables Steps_Per_BB = { "Steps Per BB", 339 };
void setup() {
// put your setup code here, to run once:
// Serial.begin(9600);
// Serial.println();
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
int eeAddress = 0; //Location we want the data to be put.
EEPROM.put(eeAddress, Number_Input);
Serial.print("Written Number_Input data type! \n\nView the example sketch eeprom_get to see how you can retrieve the values!");
eeAddress += sizeof(Number_Input); //Move address to the next byte after float 'f'.
EEPROM.put(eeAddress, Pistol_Default);
Serial.print("Written Pistol_Default data type! \n\nView the example sketch eeprom_get to see how you can retrieve the values!");
eeAddress += sizeof(Pistol_Default); //Move address to the next byte after float 'f'.
EEPROM.put(eeAddress, Rifle_Default);
Serial.print("Written Rifle_Default data type! \n\nView the example sketch eeprom_get to see how you can retrieve the values!");
eeAddress += sizeof(Rifle_Default); //Move address to the next byte after float 'f'.
EEPROM.put(eeAddress, Steps_Per_BB);
Serial.print("Written Steps_Per_BB data type! \n\nView the example sketch eeprom_get to see how you can retrieve the values!");
}
void loop() {
// put your main code here, to run repeatedly:
}
Then when trying to read the values back it shows � for the first 2 character on strings and int values are wrong for 3rd and 4th variable. is there something I may have overlooked
Code for Get sketch below
/***
eeprom_get example.
This shows how to use the EEPROM.get() method.
To pre-set the EEPROM data, run the example sketch eeprom_put.
This sketch will run without it, however, the values shown
will be shown from what ever is already on the EEPROM.
This may cause the serial object to print out a large string
of garbage if there is no null character inside one of the strings
loaded.
Written by Christopher Andrews 2015
Released under MIT licence.
***/
#include <EEPROM.h>
struct Stored_Variables {
String Name;
int Value;
};
void setup() {
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
int eeAddress = 0; //EEPROM address to start reading from
Stored_Variables Number_Input; //Variable to store custom object read from EEPROM.
EEPROM.get(eeAddress, Number_Input);
Serial.println("Read Number_Input from EEPROM: ");
Serial.println(Number_Input.Name);
Serial.println(Number_Input.Value);
eeAddress = sizeof(Number_Input); //Move address to the next byte after float 'f'.
Stored_Variables Pistol_Default; //Variable to store custom object read from EEPROM.
EEPROM.get(eeAddress, Pistol_Default);
Serial.println("Read Pistol_Default from EEPROM: ");
Serial.println(Pistol_Default.Name);
Serial.println(Pistol_Default.Value);
eeAddress = sizeof(Pistol_Default); //Move address to the next byte after float 'f'.
Stored_Variables Rifle_Default; //Variable to store custom object read from EEPROM.
EEPROM.get(eeAddress, Rifle_Default);
Serial.println("Read Rifle_Default.Name from EEPROM: ");
Serial.println(Rifle_Default.Name);
Serial.println(Rifle_Default.Value);
eeAddress = sizeof(Rifle_Default); //Move address to the next byte after float 'f'.
Stored_Variables Steps_Per_BB; //Variable to store custom object read from EEPROM.
EEPROM.get(eeAddress, Steps_Per_BB);
Serial.println("Read Steps_Per_BB from EEPROM: ");
Serial.println(Steps_Per_BB.Name);
Serial.println(Steps_Per_BB.Value);
}
void loop() {
/* Empty loop */
}
Serial monitor output
�mber Input
10
Read Pistol_Default from EEPROM:
�stol Default
26
Read Rifle_Default.Name from EEPROM:
�stol Default
26
Read Steps_Per_BB from EEPROM:
�stol Default
26