Go Down

Topic: EEprom storage using writeAnything.h (Read 2108 times) previous topic - next topic

SouthernAtHeart

mySensVals   will be numbers anywhere from 100 to 2000
Does the Uno have enough eeprom to store this many settings?
thanks.

Code: [Select]

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

retrolefty

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.  ;)

Lefty

SouthernAtHeart

Thanks! (that was quick).  I'll reread the ref section on sizes, an integer must be only 2 bytes, and a boolean 1, to only add up to 27...

SouthernAtHeart

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!

AWOL

Quote
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.
Code: [Select]
struct {
unsigned flag0:1; // defines eight, one bit fields.
unsigned flag1:1;
unsigned flag2:1;
unsigned flag3:1;
unsigned flag4:1;
unsigned flag5:1;
unsigned flag6:1;
unsigned flag7:1;};
"Pete, it's a fool looks for logic in the chambers of the human heart." Ulysses Everett McGill.
Do not send technical questions via personal messaging - they will be ignored.

SouthernAtHeart

Code: [Select]
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:
Code: [Select]
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
}


PaulS

Quote
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:
Code: [Select]
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.

Code: [Select]
    int CusYear;        //cups drank this year
CusYear? No p?

SouthernAtHeart


Code: [Select]
    int CusYear;        //cups drank this year
CusYear? No p?


Ok, maybe it'd be better with a p.
:smiley-red:

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?

PaulS

Quote
So it can be anything?

Well, there are a few reserved keywords that it CAN'T be, but everything else is what it CAN be.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy