|
Arduino晶片ATMEGA8-168中都內含一個512bytes的永久EEPROM,我們可以利用它來存一些變數。
在晶片斷電後重新啟動的狀態下,可以繼續讀取到該值。這一顆內藏在Arduino的迷你硬碟只有0.5K,雖然小但非常實用。
- 位置: 從 0 to 511 (int)
- 數值: 0 to 255 (byte)
- 可以紀錄512組0-255的數值
使用LIBRARY為 EEPROM ( http://arduino.cc/en/Reference/EEPROM )
P.S.經測試,不僅斷電可以記錄,即使重新燒錄晶片別的code再去讀取,數值都還是不會消失。
如果你附近有很多ATMEL晶片,怕搞不清楚哪顆是誰的你可以簽名在ROM裡喔!!
(前提當然是不要故意去抹除,跳轉閱讀全文後可以看抹除方法)
.png)
接著我們撰寫一個測試程式,可以在版子斷電的狀態下可以記錄Arduino晶片是第幾次重新啟動
測試方法: 燒入程式後,將USB電源或任何電源拔除。重新連接電源後,LED閃爍的次數就是晶片恢復供電的次數。
#include <EEPROM.h>
int ledPin = 13;
int burnAddress=0;
int address = 0; //0 - 511, total 512 block can store
byte valueByte; // we can count to 255
void listvalueByte(){ //ATMEGA 8 - 128 have 512 byte miniHD space
Serial.println("");
for(int i=0;i<5;i++){ //we just watch 5
Serial.print("NO.");
Serial.print(i);
Serial.print(" valueByte=");
Serial.print(EEPROM.read(i), DEC);
Serial.print("; ");
}
delay(10);
}
void clearROM()
{
for (int i = 0; i < 512; i++)
EEPROM.write(i, 0);
digitalWrite(13, HIGH);
delay(3000);
}
void blinkLED(int count){
for(int c=0;c<=count;c++)
{
digitalWrite(ledPin, HIGH);
delay(200);
digitalWrite(ledPin, LOW);
delay(200);
}
delay(3000);
}
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
valueByte = EEPROM.read(burnAddress);
valueByte += 1;
EEPROM.write(burnAddress, valueByte);
}
void loop()
{
blinkLED(valueByte);
listvalueByte();
}
|