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

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.h>
//表示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);
}
实验结果:

4.总结
整体上这课还是非常简单的,唯一需要注意就是不要擦写频繁。讲完这课后,我就可以在蓝牙多彩灯加入这个功能了,记录存储当前灯颜色然后下次打开就可以使用。
Arduino学习笔记⑦ EEPROM断电保存数据的更多相关文章
- Android(java)学习笔记182:保存数据到SD卡 (附加:保存数据到内存)
1. 如果我们要想读写数据到SD卡中,首先必须知道SD的路径: File file = new File(Environment.getExternalStorageDirectory()," ...
- Android 学习笔记之实时保存数据-现场保护onSaveInstanceState()
数据保存:在软件开发中我们希望保存下各个Activity数据,以实现客户数据的时时保存,达到较好的用户体验. 那么我们需要解决如下问题: 1.什么时候保存? 2.保存哪些数据? 我想保存应用产 ...
- Android(java)学习笔记125:保存数据到SD卡 (附加:保存数据到内存)
1. 如果我们要想读写数据到SD卡中,首先必须知道SD的路径: File file = new File(Environment.getExternalStorageDirectory()," ...
- Arduino学习笔记① 初识Arduino
1.前言 近段时间,博主陆续更新了ESP8266学习笔记,主要开发平台是Arduino.但是,对于很多无基础的初学者来说,甚至不了解Arduino是什么.因此,博主决定加入一个Arduino学 ...
- R学习笔记(4): 使用外部数据
来源于:R学习笔记(4): 使用外部数据 博客:心内求法 鉴于内存的非持久性和容量限制,一个有效的数据处理工具必须能够使用外部数据:能够从外部获取大量的数据,也能够将处理结果保存.R中提供了一系列的函 ...
- .NET MVC 学习笔记(六)— 数据导入
.NET MVC 学习笔记(六)—— 数据导入 在程序使用过程中,有时候需要新增大量数据,这样一条条数据去Add明显不是很友好,这时候最好就是有一个导入功能,导入所需要的数据,下面我们就一起来看一下导 ...
- Kotlin学习笔记(9)- 数据类
系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步! Kotlin学习笔记(1)- 环境配置 Kotlin学习笔记(2)- 空安 ...
- openresty 学习笔记二:获取请求数据
openresty 学习笔记二:获取请求数据 openresty 获取POST或者GET的请求参数.这个是要用openresty 做接口必须要做的事情.这里分几种类型:GET,POST(urlenco ...
- MyCat 学习笔记 第十篇.数据分片 之 ER分片
1 应用场景 这篇来说下mycat中自带的er关系分片,所谓er关系分片即可以理解为有关联关系表之间数据分片.类似于订单主表与订单详情表间的分片存储规则. 本文所说的er分片分为两种: a. 依据主键 ...
随机推荐
- Spring Boot(一) Hello World
一.Spring Boot之我见 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从 ...
- 使用ajax提交的json数据,产生筹码问题
使用ajax提交的json数据,我们必须添加produces注解,如下所示.否则将会产生乱码 方法一:添加produces注解 @ApiOperation(value = "删除日志&quo ...
- mybatis无法给带有下划线属性赋值问题
https://blog.csdn.net/qq_33768099/article/details/69569561
- Qt 做一个类似微信滑动聊天界面的demo
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://www.cnblogs.com/lihuidashen/p/115889 ...
- 我对android handle更新UI 的一些理解
1.handle可以方便快捷地管理子线程对主线程UI 的更新, 2.如果不用handle,当多个子线程同时请求更新UI 时,UI更新操作就无法进行
- mysql创建表时字段类型选择与优化
一.选择原则 1.应该尽量使用可以正确存储数据的最小字段类型 2.选用简单的数据类型,例如:一个是尽量用mysql内置的字段类型来存储日期和时间:另一个存储IP地址尽量用整型:能用整型的尽量不用字符串 ...
- ELK7.3实战安装配置文档
整体架构 一:环境准备 1.环境规划准备 192.168.43.16 jdk,elasticsearch-master ,logstash,kibana 192.168.43.17 jdk,ela ...
- [Next] 初见next.js
next 简介 Next.js 是一个轻量级的 React 服务端渲染应用框架 next 特点 默认情况下由服务器呈现 自动代码拆分可加快页面加载速度 简单的客户端路由(基于页面) 基于 Webpac ...
- Kotlin学习系列(一)
基本类型 在Kotlin中任何事物都是对象你可以在任何变量上调用相应的方法或属性.Kotlin的一些内置类型如下: Number: 包含整形与浮点型 Character: 字符(Chat) Boole ...
- Linux下查看版本信息
Linux下如何查看版本信息, 包括位数.版本信息以及CPU内核信息.CPU具体型号等. 1.# uname -a (Linux查看版本当前操作系统内核信息) 2.# cat /proc/ ...