簡而言之就是你想斷電后arduino還要保存一些參數(shù),就使用EEPROM吧。
在各型號的arduino控制器上的AVR芯片均帶有EEPROM,也有外接的EEPROM芯片,常見arduino控制器的EEPROM大。
Arduino UNO、Arduino duemilanove-m328、Zduino m328均使用ATmega328芯片,EEPROM都為1K
Arduino duemilanove-m168的EEPROM為512bytes
Arduino 2560的EEPROM為4K
下面我們介紹arduino自帶的EEPROM使用方法,arduino的庫已經(jīng)為我們準(zhǔn)備好了EEPROM類庫,我們要使用得先調(diào)用EEPROM.h,然后使用write和read方法,即可操作EEPROM。
另:下面的官方例子由于寫成較早,所以講EEPROM的大小都定為了512字節(jié),實際使用中,大家可參照上面所說的EEPROM大小,自行更改。
1.寫入
選擇 File>Examples>EEPROM>eeprom_write
- /*
- * EEPROM Write
- *
- * Stores values read from analog input 0 into the EEPROM.
- * These values will stay in the EEPROM when the board is
- * turned off and may be retrieved later by another sketch.
- */
- #include <EEPROM.h>
- // EEPROM 的當(dāng)前地址,即你將要寫入的地址,這里就是從0開始寫
- int addr = 0;
- void setup()
- {
- }
- void loop()
- {
- //模擬值讀出后是一個0-1024的值,但每字節(jié)的大小為0-255,所以這里將值除以4再存儲到val
- int val = analogRead(0) / 4;
-
- // write the value to the appropriate byte of the EEPROM.
- // these values will remain there when the board is
- // turned off.
- EEPROM.write(addr, val);
-
- // advance to the next address. there are 512 bytes in
- // the EEPROM, so go back to 0 when we hit 512.
- addr = addr + 1;
- if (addr == 512)
- addr = 0;
-
- delay(100);
- }
2.讀取
選擇 File>Examples>EEPROM>eeprom_read
- /*
- * EEPROM Read
- *
- * Reads the value of each byte of the EEPROM and prints it
- * to the computer.
- * This example code is in the public domain.
- */
- #include <EEPROM.h>
- // start reading from the first byte (address 0) of the EEPROM
- int address = 0;
- byte value;
- void setup()
- {
- // initialize serial and wait for port to open:
- Serial.begin(9600);
- while (!Serial) {
- ; // wait for serial port to connect. Needed for Leonardo only
- }
- }
- void loop()
- {
- // read a byte from the current address of the EEPROM
- value = EEPROM.read(address);
-
- Serial.print(address);
- Serial.print("\t");
- Serial.print(value, DEC);
- Serial.println();
-
- // advance to the next address of the EEPROM
- address = address + 1;
-
- // there are only 512 bytes of EEPROM, from 0 to 511, so if we're
- // on address 512, wrap around to address 0
- if (address == 512)
- address = 0;
-
- delay(500);
- }
3.清除
選擇 File>Examples>EEPROM>eeprom_clear
清除EEPROM的內(nèi)容,其實就是把EEPROM中每一個字節(jié)寫入0,因為只用清一次零,所以整個程序都在setup部分完成。
- /* * EEPROM Clear
- *
- * Sets all of the bytes of the EEPROM to 0.
- * This example code is in the public domain.
- */
- #include <EEPROM.h>
- void setup()
- {
- // 讓EEPROM的512字節(jié)內(nèi)容全部清零
- for (int i = 0; i < 512; i++)
- EEPROM.write(i, 0);
-
- // 清零工作完成后,將L燈點亮,提示EEPROM清零完成
- digitalWrite(13, HIGH);
- }
- void loop()
- {
- }
承擔(dān)因您的行為而導(dǎo)致的法律責(zé)任,
本站有權(quán)保留或刪除有爭議評論。
參與本評論即表明您已經(jīng)閱讀并接受
上述條款。