OK I got it - but am still having difficulty with this - i understand that the limit number of the value is 255 but what if I need 700?
#include <EEPROM.h>
void setup() {
Serial.begin(115200);
Serial.println(" startng eeprom demo ");
}
void loop() {
static int status = 0;
if (status == 0) {
writeDefaults(1, 15);
writeDefaults(2, 30);
writeDefaults(3, 60);
writeDefaults(4, 700);
status++;
}
if (status == 1) {
readDefaults();
status++;
}
delay(1000);
}
void writeDefaults(int address, byte myInt) {
Serial.print("defaults ");
byte hiByte = highByte(myInt); //breaks up into into 2 bytes
byte loByte = lowByte(myInt);
EEPROM.put(address, myInt);
Serial.print(" Done "); Serial.println(address);
}
void readDefaults() {
int value;
for (int x = 1; x < 5; x++) {
value = EEPROM.read(x);
Serial.print(x);
Serial.print("\t");
Serial.print(value);
Serial.println();
}
}
J-M-L
23
use put and get directly with the data you want.
pack all the preferences into a structure and store the structure, that will make your life easier
here is an example
#include <EEPROM.h>
struct Configuration {
char locationName[30];
float temperature;
int relativeHumidity;
};
const uint16_t EEPROM_ADDRESS = 0;
Configuration myConfiguration;
void printConfiguration(Configuration& aConfiguration) {
Serial.print("Location Name: "); Serial.println(aConfiguration.locationName);
Serial.print("Temperature: "); Serial.println(aConfiguration.temperature, 3);
Serial.print("Relative Humidity: "); Serial.println(aConfiguration.relativeHumidity);
Serial.println("----------------------------");
}
void setup() {
Serial.begin(115200);
strlcpy(myConfiguration.locationName, "Paris", sizeof myConfiguration.locationName);
myConfiguration.temperature = 17.6;
myConfiguration.relativeHumidity = 67;
Serial.println("Initial Configuration:");
printConfiguration(myConfiguration);
// save the config
EEPROM.put(EEPROM_ADDRESS, myConfiguration);
// modify the configuration
strlcpy(myConfiguration.locationName, "London", sizeof myConfiguration.locationName);
myConfiguration.temperature = 12.6;
myConfiguration.relativeHumidity = 95;
Serial.println("Modified Configuration:");
printConfiguration(myConfiguration);
// Now read it back from EEPROM
EEPROM.get(EEPROM_ADDRESS, myConfiguration);
Serial.println("Configuration From EEPROM:");
printConfiguration(myConfiguration);
}
void loop() {}
OK got it - thanks to you all
#include <EEPROM.h>
const byte E_Address[] = {1, 3, 5, 7};
const byte addressCnt = sizeof(E_Address);
const int E_Value [] = {15, 30, 60, 700};
const byte valueCnt = sizeof(E_Value);
void setup() {
Serial.begin(115200);
Serial.println(" startng eeprom demo ");
}
void loop() {
static int status = 0;
if (status == 0) {
for ( int x = 0; x < addressCnt; x++) {
writeDefaults(E_Address[x], E_Value[x]);
Serial.print("Status ");Serial.println(status);
}
status++;
}
if (status == 1) {
for ( int x = 0; x < addressCnt; x++) {
readDefaults(E_Address[x]);
Serial.print("Status ");Serial.println(status);
}
status++;
}
}
//----------------------------------------------------------
void writeDefaults(int address, int value) {
Serial.print("write defaults ");
EEPROM.put(address, value);
Serial.print(" address "); Serial.print(address);
Serial.print(" value "); Serial.println(value);
}
void readDefaults(int address) {
int value;
EEPROM.get(address, value);
Serial.print(address);
Serial.print("\t");
Serial.print(value);
Serial.println();
}
Sorry to have to updare this but I am still having an issue:
here is the test code:
// Storing variables in EEPROM
// Sequential read / write of variables.
//
// NANO ATMEGA328P
#include <EEPROM.h>
#define EEADDR 166 // Start location to write EEPROM data.
unsigned int field1, field2, field3, field4;
void setup() {
//**********************************************************
// NEEDED to change from 4 mhz to 16 mhz on this NANO ONLY
cli();
CLKPR = 0x80;
CLKPR = 0x01;
sei();
//**********************************************************
Serial.begin(38400); // FOR THIS NANO ONLY
Serial.println("EEPROM variable read and write.");
field1 = 40;
field2 = 80;
field3 = 120;
field4 = 200;
}
void loop() {
static int status = 0;
if (status == 0) {
int r = random(100, 65535);
field1 = r;
field2 = r + 1;
field3 = r + 2;
field4 = r + 3;
writeEE();
status++;
}
if (status == 1) {
readEE();
status++;
}
}
void writeEE() {
int EEAddr = EEADDR;
EEPROM.put(EEAddr, field1); EEAddr += sizeof(field1);
EEPROM.put(EEAddr, field2); EEAddr += sizeof(field2);
EEPROM.put(EEAddr, field3); EEAddr += sizeof(field3);
EEPROM.put(EEAddr, field4); EEAddr += sizeof(field4);
Serial.println("EEPROM Written");
show_vars();
}
void readEE() {
int EEAddr = EEADDR;
EEPROM.get(EEAddr, field1); EEAddr += sizeof(field1);
EEPROM.get(EEAddr, field2); EEAddr += sizeof(field2);
EEPROM.get(EEAddr, field3); EEAddr += sizeof(field3);
EEPROM.get(EEAddr, field4); EEAddr += sizeof(field4);
Serial.println("EEPROM READ");
show_vars();
}
void show_vars(void) {
Serial.print("1 "); Serial.println(field1);
Serial.print("2 "); Serial.println(field2);
Serial.print("3 "); Serial.println(field3);
Serial.print("4 "); Serial.println(field4);
}
the problem is when I read the EEPROM it does not show what was written ie
EEPROM variable read and write.
EEPROM Written
1 16907
2 16908
3 16909
4 16910
EEPROM READ
1 16910
2 0
3 16910
4 0