博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Arduino学习笔记⑦ EEPROM断电保存数据
阅读量:5067 次
发布时间:2019-06-12

本文共 1799 字,大约阅读时间需要 5 分钟。

1.前言

    EEPROM,叫做电可擦可编程可读寄存器(是不是觉得好官方,不知道是什么鬼?反正我也一脸懵逼),只需要知道这是一种断电后数据不会丢失的存储设备,可以用来应对需要做记录做保存的场合。简而言之,若想断电后Arduino仍然记住数据,就可以使用EEPROM。至于板子是否支持EEPROM,可以自主去查看板子的简洁。常见Arduino的EEPROM如下:

image

    Arduino EEPROM类库中,EEPROM的地址被设定从0开始,每个地址可以存储1B数据。所以当数据大于1B时,需要逐个字节读写。

  • Arduino UNO、Arduino Leonardo 的EEPROM有1KB=1024B的存储空间,对应地址则为0~1023;
  • Arduino Mega2560的EEPROM有4KB=4096B的存储空间,对应地址则为0~4095;

    Arduino有EEPROM类库,只需要调用EEPROM.h头文件,然后使用write()和read()函数就可以对EEPROM进行读写操作;

常用函数

1.1 write()

作用:对指定地址写入数据;

语法: EEPROM.write(address,value);
参数

  • address,EEPROM地址,起始地址为0;
  • value 写入的数据,byte型,意味着如果传入数据大于这个范围会被截断;

返回值:无;

1.2 read()

作用:从指定地址读出数据。一次读取1B数据。如果指定地址没有数据,则读出值为255;

语法: EEPROM.read(address);
参数

  • address,EEPROM地址,起始地址为0;

返回值:byte型,返回指定地址存储的数据;

注意:

  • EEPROM有10万次的擦写寿命,一次EEPROM.write会占用3ms,如果程序不断擦写EEPROM,则不用多久就损坏EEPROM,随意注意不要频繁擦写,在真正需要的时候再考虑使用,加入什么延时之类的。

3.实验

实验内容

在setup中往地址0~3中依次写入2~5,然后在loop中读取地址0~3然后把数据打印到串口显示器;
实验代码

/*** @Desc  测试EEPROM* @author 单片机菜鸟* @Date  2016/12/25* * 注意:Arduino Mega 2560的EEPROM空间是4KB* 也就是4*1024 B = 4096B* 也就是地址是0~4095*/ #include
//表示EEPROM的当前地址,也就是即将要写入的地址int addr = 0; void setup() { // 初始化串口 Serial.begin(9600); //等待串口准备好 while(!Serial); int value = 2; //在地址0~3依次写入2~5 for(int i = addr;i<4;i++){ EEPROM.write(i,value++); //延时100ms 等待写入 delay(100); }} void loop() { // put your main code here, to run repeatedly: Serial.println("read data start"); int value; for(int i = addr;i<4;i++){ value = EEPROM.read(i); Serial.print("addr:"); Serial.print(i); Serial.print("\n"); Serial.print("value:"); Serial.print(value); Serial.print("\n"); } Serial.println("read data end"); while(1);}

实验结果

image

4.总结

整体上这课还是非常简单的,唯一需要注意就是不要擦写频繁。讲完这课后,我就可以在蓝牙多彩灯加入这个功能了,记录存储当前灯颜色然后下次打开就可以使用。

转载于:https://www.cnblogs.com/danpianjicainiao/p/11048655.html

你可能感兴趣的文章
timestamp与timedelta,管理信息系统概念与基础
查看>>
第三次个人作业—“K米”评测
查看>>
“毕设导师互选系统”项目产品宣传推广方案
查看>>
处理JS中数据失真问题-随笔
查看>>
python:how does subclass call baseclass's __init__()
查看>>
【转】时间序列分析——基于R,王燕
查看>>
暑假集训考试反思+其它乱写
查看>>
XAML实例教程系列 - 命名空间(NameSpace) 三
查看>>
Bootstrap学习之二:栅格化布局
查看>>
gradle下载的依赖包位置 及 修改
查看>>
[翻译]opengl扩展教程2
查看>>
Windows下 VS2015编译boost1.62
查看>>
win8.1远程连接Redis数据库
查看>>
Codeforces Edu Round 64 A-D
查看>>
【08月14日】A股ROE最高排名
查看>>
【转】路由转发过程的IP及MAC地址变化
查看>>
【Java】登录操作中随机生成验证码的工具类
查看>>
【vue】vue.config.js
查看>>
HDR视频生态圈追踪
查看>>
Linux命令之文件处理
查看>>