Can't save data in my Arduino EEPROM. I've try with a MEGA 1280 and a Duemilanove: same results
I went back to basics (EEPROM READ - EEPROM WRITE) and can't obtain results:
even with the example (loop write - read)
it seems work, but when i remove the write command, the result of my reading is 256 for every data.
Here is my code:
#include <EEPROM.h>
int a = 0;
int value;
int i;
void setup()
{
Serial.begin(9600);
for ( i = 0; i < 256; i++) // 256 because it holds 1 byte only
{
EEPROM.write(i, i); // Write 0 in position 0, 1 in position 1 and so on
delay(5);
value = EEPROM.read(i); //read position
Serial.print(i);
Serial.print("\t");
Serial.print(value);
Serial.println();
delay(50);
// Result: serial monitor should appear : 0 0 / next line 1 1 ... /next line 256 256
}
}
void loop()
{
}
#include <EEPROM.h>
int value;
void setup()
{
Serial.begin(9600);
for (int i = 0; i < 256; i++) // 256 because it holds 1 byte only (BUT STILL IS AN INT!!)
{
EEPROM.write(i, [color=red](byte)[/color] i); // Write 0 in position 0, 1 in position 1 and so on
}
delay(100);
for (int i = 0; i < 256; i++) // 256 because it holds 1 byte only
{
value = EEPROM.read(i); //read position
Serial.print(i);
Serial.print("\t ");
Serial.println(value);
}
}
void loop() {}
Look at the EEPROM::write() function. Notice, in particular, what the type of the 2nd argument is. Then, compare that to the types of the arguments that you provide.
If you were to call the function with the correct type of argument, you would get correct results.
Your sketch works fine for me on a Diecimila. I upload the sketch, run it, see the expected output, comment out the write line, re-upload it, re-run it and see the same output.
Are you using something other then the IDE and USB port to upload your sketch? Perhaps and Flash and EEPROM are being cleared as part of the upload.
PaulS:
Look at the EEPROM::write() function. Notice, in particular, what the type of the 2nd argument is. Then, compare that to the types of the arguments that you provide.
If you were to call the function with the correct type of argument, you would get correct results.
If that is the root of the problem, then part of the blame might be the example sketch used in the Arduino reference section for EEPROM:
Example
#include <EEPROM.h>
void setup()
{
for (int i = 0; i < 512; i++)
EEPROM.write(i, i);
}
void loop()
{
}
And I ran the OP's sketch and it seemed to work fine writing to eeprom, and later after commenting out the writting to eeprom, still held and printed valid data from the eeprom.
I upload the sketch using the bootloader instead the Pocket programmer and it works fine.
then, the pocket programmer clears the IC and rewrites it????
The example works fine but it's incorrect.
Then I have to tear apart the value (integer) in two bytes to save... and when I need to retrieve the value I need to call both bytes and "paste them" ???