From dd1ec9920b8fd6b445cdcc943f53333990b34428 Mon Sep 17 00:00:00 2001 From: Chris--A Date: Tue, 17 Mar 2015 17:17:08 +1000 Subject: Added additional examples to EEPROM lib --- .../examples/eeprom_update/eeprom_update.ino | 52 ++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 libraries/EEPROM/examples/eeprom_update/eeprom_update.ino (limited to 'libraries/EEPROM/examples/eeprom_update/eeprom_update.ino') diff --git a/libraries/EEPROM/examples/eeprom_update/eeprom_update.ino b/libraries/EEPROM/examples/eeprom_update/eeprom_update.ino new file mode 100644 index 0000000..e0e18d8 --- /dev/null +++ b/libraries/EEPROM/examples/eeprom_update/eeprom_update.ino @@ -0,0 +1,52 @@ +/*** + EEPROM Update method + + Stores values read from analog input 0 into the EEPROM. + These values will stay in the EEPROM when the board is + turned off and may be retrieved later by another sketch. + + If a value has not changed in the EEPROM, it is not overwritten + which would reduce the life span of the EEPROM unnecessarily. + + Released using MIT licence. + ***/ + +#include + +/** the current address in the EEPROM (i.e. which byte we're going to write to next) **/ +int addr = 0; + +void setup(){ /** EMpty setup **/ } + +void loop() +{ + /*** + need to divide by 4 because analog inputs range from + 0 to 1023 and each byte of the EEPROM can only hold a + value from 0 to 255. + ***/ + int val = analogRead(0) / 4; + + /*** + Update the particular EEPROM cell. + these values will remain there when the board is + turned off. + ***/ + EEPROM.update(addr, val); + + /*** + The function EEPROM.update(addr, val) is equivalent to the following: + + if( EEPROM.read(addr) != val ){ + EEPROM.write(addr, val); + } + ***/ + + + /** advance to the next address. there are 512 bytes in the EEPROM, so go back to 0 when we hit 512. **/ + addr = addr + 1; + if (addr == 512) + addr = 0; + + delay(100); +} -- cgit v1.2.3-18-g5258 From 26577474efcb8874dad687467a8ba2f01678ff4c Mon Sep 17 00:00:00 2001 From: Chris--A Date: Fri, 20 Mar 2015 12:06:20 +1000 Subject: Updated EEPROM examples. Removed hard coded lengths, which were incorrect for standard Arduino's now. --- .../examples/eeprom_update/eeprom_update.ino | 23 +++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'libraries/EEPROM/examples/eeprom_update/eeprom_update.ino') diff --git a/libraries/EEPROM/examples/eeprom_update/eeprom_update.ino b/libraries/EEPROM/examples/eeprom_update/eeprom_update.ino index e0e18d8..dbf05ec 100644 --- a/libraries/EEPROM/examples/eeprom_update/eeprom_update.ino +++ b/libraries/EEPROM/examples/eeprom_update/eeprom_update.ino @@ -38,15 +38,32 @@ void loop() The function EEPROM.update(addr, val) is equivalent to the following: if( EEPROM.read(addr) != val ){ - EEPROM.write(addr, val); + EEPROM.write(addr, val); } ***/ - /** advance to the next address. there are 512 bytes in the EEPROM, so go back to 0 when we hit 512. **/ + /*** + Advance to the next address, when at the end restart at the beginning. + + Larger AVR processors have larger EEPROM sizes, E.g: + - Arduno Duemilanove: 512b EEPROM storage. + - Arduino Uno: 1kb EEPROM storage. + - Arduino Mega: 4kb EEPROM storage. + + Rather than hard-coding the length, you should use the pre-provided length function. + This will make your code portable to all AVR processors. + ***/ addr = addr + 1; - if (addr == 512) + if(addr == EEPROM.length()) addr = 0; + + /*** + As the EEPROM sizes are powers of two, wrapping (preventing overflow) of an + EEPROM address is also doable by a bitwise and of the length - 1. + + ++addr &= EEPROM.length() - 1; + ***/ delay(100); } -- cgit v1.2.3-18-g5258 From 5da9792cd61b5ba9eed9fb80874edb52081d6232 Mon Sep 17 00:00:00 2001 From: Chris--A Date: Tue, 24 Mar 2015 13:58:01 +1000 Subject: Fixed EEPROM examples and added readme --- .../EEPROM/examples/eeprom_update/eeprom_update.ino | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'libraries/EEPROM/examples/eeprom_update/eeprom_update.ino') diff --git a/libraries/EEPROM/examples/eeprom_update/eeprom_update.ino b/libraries/EEPROM/examples/eeprom_update/eeprom_update.ino index dbf05ec..831056f 100644 --- a/libraries/EEPROM/examples/eeprom_update/eeprom_update.ino +++ b/libraries/EEPROM/examples/eeprom_update/eeprom_update.ino @@ -14,7 +14,7 @@ #include /** the current address in the EEPROM (i.e. which byte we're going to write to next) **/ -int addr = 0; +int address = 0; void setup(){ /** EMpty setup **/ } @@ -32,13 +32,13 @@ void loop() these values will remain there when the board is turned off. ***/ - EEPROM.update(addr, val); + EEPROM.update(address, val); /*** - The function EEPROM.update(addr, val) is equivalent to the following: + The function EEPROM.update(address, val) is equivalent to the following: - if( EEPROM.read(addr) != val ){ - EEPROM.write(addr, val); + if( EEPROM.read(address) != val ){ + EEPROM.write(address, val); } ***/ @@ -54,15 +54,15 @@ void loop() Rather than hard-coding the length, you should use the pre-provided length function. This will make your code portable to all AVR processors. ***/ - addr = addr + 1; - if(addr == EEPROM.length()) - addr = 0; + address = address + 1; + if(address == EEPROM.length()) + address = 0; /*** As the EEPROM sizes are powers of two, wrapping (preventing overflow) of an EEPROM address is also doable by a bitwise and of the length - 1. - ++addr &= EEPROM.length() - 1; + ++address &= EEPROM.length() - 1; ***/ delay(100); -- cgit v1.2.3-18-g5258