http://arduino.cc/en/Tutorial/EEPROMWrite
http://arduino.cc/en/Tutorial/EEPROMRead
Le microprocesseur des cartes Arduino possède 512 bytes (adresse allant de 0 à 511) d’EEPROM ce qui permet de stocker 512 valeurs allant de 0 à 255. Soit un byte = 1 octet = 8 bits donc 256 valeurs de 0 à 255 soit en hexadécimal de #00 à #FF
0 = 00000000
1 = 00000001 2 = 00000010 ... 254 = 11111110 255 = 11111111
Par défaut, la valeur stockée dans les bytes est de 255.
Un integer (int) est stocké dans deux byte. Il est possible d’obtenir la décomposition en utilisant les fonctions highByte et lowByte. La première donnant la valeur > à 255 et la seconde < à 255. Un entier long (long) est stocké sur 4 bytes.
Exemple de sketch lisant la valeur de l’adresse 0 de l’EEPROM puis stockant la valeur 10. Lors de la première exécution du sketch l’affichage restitue 255 la 2nd fois que le programme est lancé affichage de 10.
//-- Write and read EEPROM Value
#include <EEPROM.h>
void setup()
{int addr=0;
byte value;
//-- initialize serial and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
//-- read the value of the adress 0 of the EEPROM
value=EEPROM.read(addr);
Serial.print(addr);
Serial.print("\t");
Serial.print(value, DEC);
Serial.println();
//-- write at address 0 the value 10 in the EEPROM
EEPROM.write(addr, 10);
}
void loop()
{}
Autre exemple permettant de stocker sur 2 byte des valeurs > à 256 :
int channel[12];
/*-- Exemple d'appel
readChannelsFromEEPROM();
channel[channelNumber] = currentChannel;
saveChannel(channelNumber, currentChannel);
*/
void saveChannel(int i, int channel)
{
byte high = highByte(channel);
byte low = lowByte(channel);
EEPROM.write(i * 2, high);
EEPROM.write(i * 2 + 1, low);
}
void readChannelsFromEEPROM()
{
for (int i = 0; i < 12; i++)
{
byte high = EEPROM.read(i*2);
byte low = EEPROM.read(i*2 + 1);
int ch = high * 256 + low;
if (ch > 700 && ch < 1500)
{
channel[i] = ch;
}
}
}
/*************************************
int test = 0xABCD; // 16 bits
byte hi, lo; // 8 bits each
hi = HighByte(test); // 0xAB
lo = LowByte(test); // 0xCD.
*************************************/
Votre commentaire