如何在 Arduino 中更新 EEPROM 中的現有資料?
Arduino Uno 擁有 1 kB 的 EEPROM 儲存空間。EEPROM 是一種非易失性儲存器,即即使在斷電後其內容也會保留。因此,它可以用於儲存您希望在電源迴圈之間保持不變的資料。配置或設定就是此類資料的示例。
在本文中,我們將瞭解如何更新 EEPROM 中的現有資料。我們將逐步介紹 Arduino 中的內建示例。EEPROM 示例可以從以下位置訪問:**檔案 → 示例 → EEPROM**。
示例
我們將研究 **eeprom_update** 示例。您實際上使用的是 **EEPROM.update()** 函式。**EEPROM.update()** 函式與 **EEPROM.write()** 函式的不同之處在於,它只有在新的值與已儲存在該地址中的值不同時才會覆蓋 EEPROM 中的值。為什麼?因為每個 EEPROM 每個地址的寫入週期數量有限(約 100,000 次)。如果我們不斷覆蓋任何地址位置的相同值,就會縮短 EEPROM 的壽命。
我們首先包含庫檔案。
#include <EEPROM.h>
接下來,我們定義一個用於地址的全域性變數。在 setup 函式中沒有任何操作。
int address = 0;
void setup() {
/** EMpty setup **/
}在迴圈中,我們從模擬輸入(本例中為 A0)讀取值,並使用 **.update()** 函式將其寫入 EEPROM。然後我們遞增地址並重復此操作。如果到達 EEPROM 長度的結尾,我們返回開頭 (**addr = 0**)。
請注意,我們將模擬讀取輸出除以 4,因為位元組只能具有 0 到 255 的值,而 **analogRead()** 輸出值的範圍是 0 到 1023。
void loop() {
int val = analogRead(A0) / 4;
EEPROM.update(address, val);
/***
The function EEPROM.update(address, val) is equivalent to the following:
if( EEPROM.read(address) != val ){
EEPROM.write(address, val);
}
***/
address = address + 1;
if (address == EEPROM.length()) {
address = 0;
}
delay(100);
}正如註釋中提到的那樣,**.update()** 函式等效於讀取該地址處的 EEPROM,並且僅當新值與讀取的值不同時才寫入它。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP