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に読み込む。
また、読み込んだ結果はシリアルモニタで確認することができる。
#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()
{
}
EEPROMのgetメソッドとputメソッド
次のサンプルコードでは、getメソッドとputメソッドを利用して、ユーザ定義のMYSTRUCT構造体をEEPROMに読み書きしている。
特定のデータ構造を非構造的な保存領域に記憶する際は、
データ構造の先頭にシグネチャ(例 : 3文字等)を置いたり、データ構造のバージョン番号も同時に書き込むことによって、
複数のプログラムバージョンに対応することができる。
#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()
{
}