利用EEPROM实现arduino的断电存储

转载请注明:@小五义http://www.cnblogs.com/xiaowuyi  QQ群:64770604

一、EEPROM简介

      EEPROM (Electrically Erasable Programmable Read-Only Memory),上电可擦可编程只读存储器--一种掉电后数据不丢失的存储芯片,简而言之就是你想断电后arduino还要保存一些参数,就使用EEPROM吧。在各型号的arduino控制器上的AVR芯片均带有EEPROM,也有外接的EEPROM芯片,常见arduino控制器的EEPROM大小:Arduino UNO、Arduino duemilanove-m328、Zduino m328均使用ATmega328芯片,EEPROM都为1K,Arduino duemilanove-m168的EEPROM为512bytes。下面以arduino leonardo介绍arduino自带的EEPROM使用方法,以及arduino插拔次数的计数方法,arduino中已经存在EEPROM类库,我们要使用得先调用EEPROM.h,然后使用write和read方法,即可操作EEPROM。

二、arduino iDE中的例程(具体程序请从ide中添加)

     1.写入例程

     选择 File>Examples>EEPROM>eeprom_write。

     2.读取例程
     选择 File>Examples>EEPROM>eeprom_read。

     3.清除
     选择 File>Examples>EEPROM>eeprom_clear
     清除EEPROM的内容,其实就是把EEPROM中每一个字节写入0,因为只用清一次零,所以整个程序都在setup部分完成。

三、利用EEPROM存储记录arduino使用次数

    记录arduino的使用次数,就是记录arduino上电次数。考虑利用eeprom进行存储,每上电一次,存储数值加1。

    (1)清零程序

    在arduino首次使用或者记录时,先清零,保证从0开始记数。具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
##转载请注明:@小五义http://www.cnblogs.com/xiaowuyi  QQ群:64770604
#include <EEPROM.h>
int address ;//应用EEPROM地址位为1
int value=0;
void setup()
{
 
  value==1 ;
   EEPROM.write(address, value);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
}
 
void loop()
{
  //Serial.print(address);
  Serial.print(value);
  Serial.println();
  delay(1000);
}

  (2)记数程序

    清零后,将此记数程序烧入,以后每次上电,EEPROM的存储值会加1,实现对arduino使用次数的记录。具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
##转载请注明:@小五义http://www.cnblogs.com/xiaowuyi  QQ群:64770604
#include <EEPROM.h>
int address ;//应用EEPROM地址位为1
int value;
void setup()
{
  // initialize serial and wait for port to open:
  Serial.begin(9600);
  value = EEPROM.read(address);
  value+=1 ;
   EEPROM.write(address, value);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
}
 
void loop()
{
  //Serial.print(address);
  Serial.print(value);
  Serial.println();
  delay(1000);
}

  最后,感谢公司李同学的文档整理。

 

posted @   小五义  阅读(12965)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示