Stap 2: Code tijd.
In de eerste plaats ook de hoofding bevat draad bibliotheek ergens in de buurt van de bovenkant van uw schets:
/* Use 24LC256 EEPROM to save settings */
#include <Wire.h>
Voeg vervolgens enkele functies om te lezen en te schrijven bytes vanaf de EEPROM (ik alleen de zorg over afzonderlijke bytes, maar er is een pagina schrijven functie in de chip ook). Opmerking Er is een macro-definitie van 0x50... Dit is het adres van de chip op de i2c-bus (u kunt meer dan één i2c dingetjes op een i2c bus en selecteer welke één u wilt praten met door het veranderen van het adres).
/* 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;
}
U kunt uncomment de Serial.print(...)
lijnen als u wilt zien sommige debug output.
In arduinos setup()
functie u start de draad bibliotheek en na te lezen in de oorspronkelijke waarden.
Hier lees ik in twee bytes ( flags
en max_cc
), twee woorden ( lean_min
en lean_max
) en een array van woorden 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));
}
Hier is de bit van de code die hen in de EEPROM schrijft:
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]));
}
Dat is over het echt.