mySensVals will be numbers anywhere from 100 to 2000
Does the Uno have enough eeprom to store this many settings?
thanks.
struct config_settings
{
int mySensVals[12]; //# of pulses in 2-12 cups
boolean Enable_Audio; //whether the user wants sound
boolean Enable_Piezo; //whether the user wants a knock sensor
boolean Enable_PhotoCell; //whether the user wants to use the photocell
} MySettings;
//...set up values to save.
EEPROM_writeAnything(0, MySettings); //save the settings
I count 27 bytes of storage needed to store that structure into eeprom. As the Uno has a 1,000 byte eeprom it should fit rather nicely, if not lonely with all the extra eeprom space avalible.
Yeah, I just read the size of bolleans and integers. strange a boolean only holds true or false, in 1 byte, and and integer at 2 bytes can hold a huge number. I thought it would have been a lot more bytes than that. I should be okay with all the settings I can think of changing!
strange a boolean only holds true or false, in 1 byte, and and integer at 2 bytes can hold a huge number.
The smallest addressible item on the AVR is a byte.
If you are really pushed for space (it doesn't look like you are!), you can use structs with bit-fields defined in them for boolean flags.
struct config_settings {
int mySensVals[13]; //# of pulses in 2-12 cups
int motor_delay; //change the distance the platform travels
boolean Enable_Audio; //whether the user wants sound
boolean Enable_Piezo; //whether the user wants a knock sensor
boolean Enable_Photocell; //whether the user wants to use the photocell to turn on the cabinet lighting
int Photocell_Level; //threshold for light/darkness
} MySettings;
void LoadSettings(){
EEPROM_readAnything(0, MySettings); //load the settings
}
void SaveSettings(){
EEPROM_writeAnything(0, MySettings); //save the settings
sendMessage("Settings saved!");
}
...so I think I'm using 33 bytes of EEPROM to save settings.
Now I have other settings I want to save/load in reference to time, since I've added an RTC module.
Can I save other settings to another part of the EEPROM like this:
struct config_settings {
int CurrentYear; //for keeping track of what year it is
int CupsTotal; //lifetime total
int CupsMonth; //cups drank this month
int CusYear; //cups drank this year
int CupsLast; //last cup drank
} TimeData;
void LoadSettings(){
EEPROM_readAnything(34, TimeData); //load the settings
}
void SaveSettings(){
EEPROM_writeAnything(34, TimeData); //save the settings
}
Can I save other settings to another part of the EEPROM like this:
Yes, and no. You have the right idea, and address, but this:
struct config_settings {
int CurrentYear; //for keeping track of what year it is
int CupsTotal; //lifetime total
int CupsMonth; //cups drank this month
int CusYear; //cups drank this year
int CupsLast; //last cup drank
} TimeData;
won't work, because you have already defined a struct called config_settings, so you can't define another struct with the same name.
Thanks, I didn't think about the first part of that struct, since I never use the name 'config_settings', I thought it was just part of the code that made the whole thing work. So it can be anything?