EEPROM读写具有代表性案例汇集

438 篇文章 1643 订阅 ¥19.90 ¥99.00

EEPROM读写案例汇集
1.功能描述:该代码向EEPROM写入100字节数据

/功能描述:该代码向EEPROM写入100字节数据
#include <EEPROM.h>
int addr = 0; //EEPROM数据地址
void setup() { 
Serial.begin(115200);
Serial.println("");
Serial.println("开始写write");
EEPROM.begin(100);//申请内存并读取flash中相应的数据到内存
for(addr = 0; addr<100; addr++){
  int data = addr;
  EEPROM.write(addr, data); //写数据
}
EEPROM.end(); //把数据写入flash,并释放内存
Serial.println("结束write");
 }
void loop() { 
 }

2.读数据

#include <EEPROM.h>
int addr = 0; //EEPROM数据地址
void setup() { 
Serial.begin(115200);
Serial.println("");
Serial.println("开始读数据");
EEPROM.begin(100);//申请100内存空间
for(addr = 0; addr<100; addr++){
  int data = EEPROM.read(addr); //从内存中读取一个字节数据
  Serial.println(data);
  delay(2);
}
EEPROM.end();
}
void loop() { 
 }

3.保存一个string类型

#include <EEPROM.h> 
String str="hello";
void setup() {
  Serial.begin(115200); 
  Serial.println("");
  EEPROM.begin(1024);
  
  set_String(0,1,str);
  String s=get_String(EEPROM.read(0),1);

  Serial.print("s的值:");
  Serial.println(s);
}
void loop() {
}
//a写入字符串长度,b是起始位,str为要保存的字符串
void set_String(int a,int b,String str){
  EEPROM.write(a, str.length());//EEPROM第a位,写入str字符串的长度
  //把str所有数据逐个保存在EEPROM
  for (int i = 0; i < str.length(); i++){
    EEPROM.write(b + i, str[i]);
  }
  EEPROM.commit();
}
//a位是字符串长度,b是起始位
String get_String(int a, int b){ 
  String data = "";
  //从EEPROM中逐个取出每一位的值,并链接
  for (int i = 0; i < a; i++){
    data += char(EEPROM.read(b + i));
  }
  return data;
}

4.使用共用体,快捷的存储各类型数据到EEPROM。
首先了解一下什么是【共用体】:将几个不同(类型不同,但长度相同)的变量放到同一段内存中,共同占用这一段内存数据,使各变量的内存数据始终保持一致。
在使用Arduino提供的EEPROM API,只能将【字节型】的数据的存入EEPROM,也就是一次只能写入1个字节。如果要存储多个字节的数据类型,又需要怎么做呢?
例如:一个float类型的数据,需要占用4个字节的存储空间。因此我们可以把一个float拆分为4个字节,然后逐字节的写入EEPROM,来达到保存float数据的目的。但是手动计算的话,比较麻烦。
这里我们使用共用体,通过其它数据结果,快捷的把float数据拆分为4个字节。
首先定义一个名为data的共用体结构,共用体中有两个类型不同的成员变量:

union data
 {
   float a;  // 浮点型,占用4个字节
   byte b[4];  // 字节型数组,占用4个字节。
   // 这两个类型的变量都是占用4个字节,且是相同的4个字节,所以能始终保持数据一致,其中一个变了,另一个也随之改变。
 };

再申明一个data类型的变量col:data col;
现在你可以通过 col.a 访问这个共用体中的 float 类型成员 a,也可以通过 col.b 访问这个共用体中的 byte 类型成员 b。
col.a 和 col.b 共同占用四个字节的地址。
给 col.a 赋值后,通过 col.b 即可拆分 float 为4个字节。
(1)通过共用体写入:

#include <EEPROM.h>
union data
{
  float a;
  byte b[4];
};
data col;
int addr = 0;

void setup()
{	EEPROM.begin(1024);
  col.a=987.65;  // 通过 a 赋值
  for(int i=0;i<4;i++)
  EEPROM.write(i, col.b[i]);  // 通过 b 拆分为4个字节 
  delay(10);
   EEPROM.end();
}

void loop()
{
}

(2)通过共用体读取:

#include <EEPROM.h>
union data
{
  float a;
  byte b[4];
};
data col;
int addr = 0;
void setup()
{
  EEPROM.begin(1024);
  Serial.begin(9600);   
  for(int i=0;i<4;i++)
  col.b[i]=EEPROM.read(i);
  delay(10);
  EEPROM.end();
  Serial.println(col.a);
}
void loop()
{
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值