Étape 2: Durée de Code.
D’une part, inclure les en-têtes de bibliothèque fil quelque part près du dessus de votre sketch :
/* Use 24LC256 EEPROM to save settings */
#include <Wire.h>
Puis ajouter quelques fonctions pour lire et écrire les octets de la mémoire EEPROM (je seulement me soucie octets individuels mais il y a une fonctionnalité d’écriture de page dans la puce de trop). Remarque Il existe une définition de macro de 0 x 50... Il s’agit de l’adresse de la puce sur le bus i2c (vous pouvez connecter plusieurs thingies i2c sur un bus i2c et sélectionnez celui que vous voulez parler en changeant l’adresse).
/* These two functions help us write to the 24LC256 EEPROM chip */
#define EEPROM_ADDR 0x50
void EEPROM_write(unsigned int addr,byte data) {
int rdata = data;
Wire.beginTransmission(EEPROM_ADDR);
Wire.write((int)(addr >> 8)); // MSB
Wire.write((int)(addr & 0xFF)); // LSB
Wire.write(rdata);
Wire.endTransmission();
//Serial.print("EEPROM write: addr: ");
//Serial.print(addr);
//Serial.print(" ");
//Serial.println(data);
delay(5);
}
byte EEPROM_read(unsigned int addr) {
byte data = 0xFF;
Wire.beginTransmission(EEPROM_ADDR);
Wire.write((int)(addr >> 8)); // MSB
Wire.write((int)(addr & 0xFF)); // LSB
Wire.endTransmission();
Wire.requestFrom(EEPROM_ADDR,1);
if (Wire.available()) data = Wire.read();
//Serial.print("EEPROM read: addr: ");
//Serial.print(addr);
//Serial.print(" ");
//Serial.println(data);
delay(5);
return data;
}
Vous pouvez décommenter la Serial.print(...)
si vous voulez voir quelques-uns des lignes sortie de débogage.
Dans arduinos setup()
fonction vous commencez la bibliothèque de fils et pouvez lire des valeurs initiales.
Ici, j’ai lu dans deux octets ( flags
et max_cc
), deux mots ( lean_min
et lean_max
) et un tableau de mots sd_max[3]
:
// read values saved in the EEPROM
Wire.begin();
// read values saved in the EEPROM
Wire.begin();
flags=EEPROM_read(0);
max_cc=EEPROM_read(1);
lean_min=word(EEPROM_read(3),EEPROM_read(2));
lean_max=word(EEPROM_read(5),EEPROM_read(4));
for(int j=0;j<3;j ) {
sd_max[j]=word(EEPROM_read(7 j*2),EEPROM_read(6 j*2));
}=EEPROM_read(0);
EEPROM_write(0,flags);
EEPROM_write(1,max_cc);
EEPROM_write(2,lowByte(lean_min));
EEPROM_write(3,highByte(lean_min));
EEPROM_write(4,lowByte(lean_max));
EEPROM_write(5,highByte(lean_max));
for(int j=0;j<3;j ) {
EEPROM_write(6 j*2,lowByte(sd_max[j]));
EEPROM_write(7 j*2,highByte(sd_max[j]));
}=EEPROM_read(1);
=word(EEPROM_read(3),EEPROM_read(2));
=word(EEPROM_read(5),EEPROM_read(4));
for(int j=0;j<3;j ) {
sd_max[j]=word(EEPROM_read(7 j*2),EEPROM_read(6 j*2));
}
Voici le morceau de code qui écrit dans l’EEPROM :
EEPROM_write(0,);
EEPROM_write(1,);
EEPROM_write(2,lowByte());
EEPROM_write(3,highByte());
EEPROM_write(4,lowByte());
EEPROM_write(5,highByte());
for(int j=0;j<3;j ) {
EEPROM_write(6 j*2,lowByte(sd_max[j]));
EEPROM_write(7 j*2,highByte(sd_max[j]));
}
C’est à ce sujet vraiment.