• Increase font size
  • Default font size
  • Decrease font size
  • default color
  • cyan color
  • red color

Arduino.TW樂園

Member Area
Arduino內部的小硬碟(512bytes)
站長Blog文章單元 - 入門教學(連接小電阻,光敏,五分鐘搞定的)
作者是 xlinx   
週四, 26 十一月 2009 22:51

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裡喔!!

(前提當然是不要故意去抹除,跳轉閱讀全文後可以看抹除方法)

  

接著我們撰寫一個測試程式,可以在版子斷電的狀態下可以記錄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();
}

 


blog comments powered by Disqus
最近更新在 週四, 26 十一月 2009 23:42