Lägga till en 24LC256 EEPROM till Arduino Due (2 / 3 steg)
Steg 2: Kod tid.
För det första inkludera Wire bibliotek headers någonstans nära toppen av din skiss:
/* Use 24LC256 EEPROM to save settings */
#include <Wire.h>
Lägg sedan till några funktioner för att läsa och skriva byte från EEPROM (jag bara bryr sig om enskilda byte men det finns en sida skriva funktion i chip också). Notera att det är en makrodefinition av 0x50... Detta är adressen till chipet på i2c bussen (du kan ansluta fler än en i2c thingies på i2c bussen och välj vilka du vill prata med genom att ändra adressen).
/* 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;
}
Du kan kommentera bort den Serial.print(...)
linjer om du vill se några debug utmatning.
I arduinos setup()
funktion du starta tråd biblioteket och kan läsa i ursprungliga värden.
Här läste jag i två byte ( flags
och max_cc
), två ord ( lean_min
och lean_max
) och en mängd ord 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));
}
Här är lite kod som skriver dem in i 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]));
}
Thats om det verkligen.