根据官方说明,各版本的Arduino都自带一个小容量的EEPROM,在各型号的arduino控制器上的AVR芯片均带有EEPROM,也有外接的EEPROM芯片,常见arduino控制器的EEPROM大小:
Arduino UNO、Arduino duemilanove-m328、Zduino m328均使用ATmega328芯片,EEPROM都为1K
Arduino duemilanove-m168的EEPROM为512bytes
Arduino 2560的EEPROM为4K
这里为了简单体验读写EEPROM的操作过程,先向前十个字节里分别写入250~241序列数值,然后断电,再上电,再通过读取函数,将前十个字节的内容读取出来,比较是不是当初断电前保存进去的数据即可。
代码文件:sketch_eeprom.ino
/**********************************************************************
针对Arduino UNO 版本
自带1K 大小的EEPROM空间,实现断电可保存数据
*********************************************************************/
#include <EEPROM.h> //引入EEPROM的类库,方便读写操作
int addr = 0;
int state = 1;
/***********************************************************************
初始化过程
**********************************************************************/
void setup()
{
Serial.begin(9600);
if(state)
{
Serial.println("read data...");
read(0);
}else
{
Serial.println("write data...");
int val = 250;
for(int i = 0;i<10;i++)
{
write(val--);
}
}
}
void loop()
{
}
/****************************************************************
保存数据,按字节保存
为了方便测试,这里只向前十个字节里写入250~241数值
***************************************************************/
void write(int value)
{
EEPROM.write(addr,value);
Serial.print(addr);
Serial.print(":\t");
Serial.print(value,DEC);
Serial.print("\n");
addr = addr + 1;
if(addr == 512)
{
addr = 0;
delay(100);
}
}
/******************************************************************
读取数据,一个字节一个字节地读取
为了方便测试,这里只读取前十个字节的内容
*****************************************************************/
void read(int addr)
{
int value = 0;
for(int i = 0;i<10;i++)
{
value = EEPROM.read(addr++);
Serial.print("addr:");
Serial.print(addr-1);
Serial.print("=");
Serial.println(value,DEC);
Serial.println("");
}
}
void cleardata()
{
for(int i=0;i<512;i++)
{
EEPROM.write(i,0);
}
digitalWrite(13,HIGH);
Serial.println("clear end");
}
注:这里将变量state作为切换读取和写入的开关量,当state为0时,upload至arduino板后将在初始化阶段写入十个数值,当state为1时,upload至arduino板后在初始化阶段将把EEPROM中前十个字节内容读取出来,通过串口输出。
写数据时串口输出内容:
读数据时,串口输出内容:
注:清除EEPROM的数据即对各字节均赋值0即可,详见上述代码中的cleardata()函数。

这篇博客介绍了如何在Arduino控制器的EEPROM中进行读写操作。通过一个简单的示例,博主展示了如何向Arduino UNO等使用ATmega328芯片的版本的前十个字节写入250~241的序列数值,然后断电再上电后读取这些数据,以验证数据的持久性。代码文件为sketch_eeprom.ino,通过变量state控制写入和读取操作。此外,还提及了如何清除EEPROM数据的方法。
2433

被折叠的 条评论
为什么被折叠?



