//---------------------------------------
//AT24C04 EEPROM Programming via Arduino. 寫入字符串,讀取字符串
//---------------------------------------
#include <Wire.h>
//先定義待讀取的EEPROM地址
#define EEPROM1_I2C_address 0x50
void setup()
{
Serial.begin(9600);
Wire.begin();
char word[] = "test$hello world$"; //這個地方放置待寫入的字串
char message1[100]; //宣告50個字的字符串
writeStringToEEPROM(word); //呼叫自製函數寫字串到EEPROM
Serial.println("EEPROM 3: ");
for(int i=0; i<=100; i++) //最多讀取前200個字
{
char asciiChar = readFromEEPROM(EEPROM1_I2C_address, i); //讀到的本身是數字,換成字元
message1[i]=asciiChar; //把讀到的字存到字符串1
}
String myString = message1;
int first_position = myString.indexOf("$");
int sec_position = myString.indexOf("$",first_position+1);
Serial.println(myString.substring(0, first_position));
Serial.println(myString.substring(first_position+1, sec_position));
}
void loop() {}
void writeStringToEEPROM(const char* str) { //寫一串字到EEPROM中,位置0開始
int len = strlen(str);
for (int i = 0; i < len; i++) {
writeToEEPROM(EEPROM1_I2C_address, i, str[i]);
}
writeToEEPROM(EEPROM1_I2C_address, len, '$'); // 寫入字符串結束符$
}
void writeToEEPROM(byte EEPROMAddress, byte dataAddress, byte dataValue)
{
Wire.beginTransmission(EEPROMAddress);
Wire.write(dataAddress);
Wire.write(dataValue);
Wire.endTransmission();
delay(5);
}
byte readFromEEPROM(byte EEPROMAddress, byte dataAddress)
{
Wire.beginTransmission(EEPROMAddress);
Wire.write(dataAddress);
Wire.endTransmission();
delay(5);
Wire.requestFrom(EEPROMAddress, 1);
if(Wire.available()) return Wire.read();
}