Arduino學習筆記⑦ EEPROM斷電保存數據

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進行讀寫操做;oop

經常使用函數

1.1 write()

做用:對指定地址寫入數據;
語法: EEPROM.write(address,value);
參數測試

  • address,EEPROM地址,起始地址爲0;
  • value 寫入的數據,byte型,意味着若是傳入數據大於這個範圍會被截斷;

返回值:無;ui

1.2 read()

做用:從指定地址讀出數據。一次讀取1B數據。若是指定地址沒有數據,則讀出值爲255;
語法: EEPROM.read(address);
參數code

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

返回值:byte型,返回指定地址存儲的數據;blog

注意:it

  • EEPROM有10萬次的擦寫壽命,一次EEPROM.write會佔用3ms,若是程序不斷擦寫EEPROM,則不用多久就損壞EEPROM,隨意注意不要頻繁擦寫,在真正須要的時候再考慮使用,加入什麼延時之類的。

3.實驗

實驗內容
在setup中往地址0~3中依次寫入2~5,而後在loop中讀取地址0~3而後把數據打印到串口顯示器;
實驗代碼class

/**
* @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);
}

實驗結果
image語法

4.總結

總體上這課仍是很是簡單的,惟一須要注意就是不要擦寫頻繁。講完這課後,我就能夠在藍牙多彩燈加入這個功能了,記錄存儲當前燈顏色而後下次打開就能夠使用。

相關文章
相關標籤/搜索