Arduinoの基礎 - EEPROM
ナビゲーションに移動
検索に移動
概要
Arduino上のマイコンにはEEPROM(Electrically Erasable Programmable Read-Only Memory)がある。
EEPROMがあれば、ハードディスクのように電源がOFFの場合でもメモリ上の値を保持することができる。
Arduino IDE上で利用可能なEEPROMライブラリもあるので、読み込みや書き込みは非常に簡単である。
EEPROMのサイズはマイコンの種類によって違うので、利用時には注意する。
ATmega88と168では512[Byte]、ATmega328では1[KB]、 ATmega1280とATmega2560では4[KB]である。
また、1[Byte]を書き込むのに掛かる時間は3.3[mS]であり、更にデータを削除して書き込むというサイクルの寿命は10万回とされている。
EEPROM の read/write
EEPROMライブラリでは、書き込み時はwriteメソッド、読み込み時はreadメソッドがあり、1バイト毎に読み書きを行う。
次のサンプルコードでは、MYSTRUCT構造体を定義して、それをEEPROMに書き込み、 s2に読み込む。
また、読み込んだ結果はシリアルモニタで確認することができる。
<syntaxhighlight lang="c++"> #include <EEPROM.h> typedef struct _MYSTRUCT { int i; char c; } MYSTRUCT, *PMYSTRUCT; void setup() { Serial.begin(9600); MYSTRUCT s = {.i = 1234, .c = 'z'}; byte *p = (byte*)&s; for(int i = 0; i < sizeof(MYSTRUCT); i++) { EEPROM.write(i, *p); p++; } MYSTRUCT s2; byte *p2 = (byte*) &s2; for(int i = 0; i < sizeof(MYSTRUCT); i++) { byte b = EEPROM.read(j); *p2 = b; p2++; } Serial.println( s2.i ); Serial.println( s2.c ); } void loop() { } </source>
EEPROMのgetメソッドとputメソッド
次のサンプルコードでは、getメソッドとputメソッドを利用して、ユーザ定義のMYSTRUCT構造体をEEPROMに読み書きしている。
特定のデータ構造を非構造的な保存領域に記憶する際は、
データ構造の先頭にシグネチャ(例 : 3文字等)を置いたり、データ構造のバージョン番号も同時に書き込むことによって、
複数のプログラムバージョンに対応することができる。
<syntaxhighlight lang="c++"> #include <EEPROM.h> typedef struct _MYSTRUCT { int i; char c; } MYSTRUCT, *PMYSTRUCT; void setup() { MYSTRUCT s3 = {.i = 9876, .c = 'a'}; EEPROM.put(0, s3); MYSTRUCT s4; EEPROM.get(0, s4); Serial.println(s4.i); Serial.println(s4.c); } void loop() { } </source>