Arduino Forum

Using Arduino => Storage => Topic started by: SouthernAtHeart on Mar 04, 2011, 03:57 am

Title: EEprom storage using writeAnything.h
Post by: SouthernAtHeart on Mar 04, 2011, 03:57 am
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
Title: Re: EEprom storage using writeAnything.h
Post by: retrolefty on Mar 04, 2011, 04:00 am
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
Title: Re: EEprom storage using writeAnything.h
Post by: SouthernAtHeart on Mar 04, 2011, 04:02 am
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...
Title: Re: EEprom storage using writeAnything.h
Post by: SouthernAtHeart on Mar 04, 2011, 04:04 am
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!
Title: Re: EEprom storage using writeAnything.h
Post by: AWOL on Mar 04, 2011, 11:52 am
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;};
Title: using writeAnything.h more than once
Post by: SouthernAtHeart on May 04, 2011, 06:36 pm
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
}

Title: Re: EEprom storage using writeAnything.h
Post by: PaulS on May 05, 2011, 07:22 pm
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?
Title: Re: EEprom storage using writeAnything.h
Post by: SouthernAtHeart on May 05, 2011, 08:13 pm

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?
Title: Re: EEprom storage using writeAnything.h
Post by: PaulS on May 05, 2011, 09:09 pm
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.