つれづれなる備忘録

日々の発見をあるがままに綴る

TinkercadによるArduinoシミュレーション39 ~ 内蔵メモリへの読み書き

今回はArduinoの内蔵メモリ(EEPROM)へのデータの書き込み・読み出しについて紹介する。EEPROMにデータを書き込んでおけば、電源を切っても初期化されず内容を保存することができる。

1. EEPROMの利用方法

 Arduinoに使用されているマイコン(ATmega328など)によってデータ容量が異なるが、EEPROMにアクセスするには#include<EEPROM.h>としてEEPROMライブラリを使用する。EEPROMにアクセスしてデータを書き込むためにはEEPROM.write(address,data)を使用し、addressはデータを書き込む位置(アドレス), dataは1バイトの値(0-255)とする。同様にEEPROMにアクセスしてデータを読み出すにはEEPROM.read(address)とするとaddressの位置に格納されているデータを読み出す。

2. EEPROMの読み書き

 EEPROMに対してデータを書き込み、それを読み出すスケッチを以下に示す。最初のsetup()内にEEPROMの0-511の位置に0-255(インクリメントが255に達すると0に戻る)のデータを書き込み、loop()関数内でsetup関数で書き込んだデータを順次読み出してシリアルモニタに表示する。

#include <EEPROM.h>

int a = 0;
int value;

void setup() {
  for (int i = 0; i < 512; i++)
    EEPROM.write(i, i);  // EEPROMに0-511の位置に0-255を書き込む
  Serial.begin(9600);
}

void loop() {
  value = EEPROM.read(a); //EEPROMのアドレス0からデータを読み出す
  
  Serial.print("add:");
  Serial.print(a);
  Serial.print("\t");
  Serial.print(value);
  Serial.println();

  a = a + 1;
  if (a == 512) a = 0;

  delay(500);
}

TInkercadで上のスケッチを実行した結果は以下のようになる。

"EEPROMへのデータ読み書き"
EEPROMへのデータ読み書き

データが正しく読み書きできていることが確認できると思う。

3. データ保存の確認方法

 TinkercadArduinoシミュレーションを行う場合、Arduinoの電源をオフにするという操作はできない。またシミュレーションを停止する場合はすべてリセットされてしまうので、Arduinoの電源をオフにするという状況にならない。そこでシミュレーション実行中にEEPROMにデータを書き込んだ後に、Arduinoのリセットボタン(左上にある赤いボタン)を押すことで、電源オフに近い状況(変数などは一度リセットされる)にすることで、書き込まれたデータがメモリに保存されていることを確認する。

以下のスケッチはloop関数内でEEPROMのデータ読み出しを行ってから、データの書き込みを行っている。先にデータを読み出すので読み出されるデータはすべて0だが、リセットボタンを押してループを1から再度実行するとリセット前の書き込まれたデータが読み出される。

#include <EEPROM.h>

int a = 0;
int value;
int i=0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  value = EEPROM.read(a); //EEPROMのアドレス0からデータを先に読み出す
  
  Serial.print("add:");
  Serial.print(a);
  Serial.print("\t");
  Serial.print(value);
  Serial.println();

  a = a + 1;
  if (a == 512) a = 0;

  delay(500);
  
  EEPROM.write(i, i);  // EEPROMに0-511の位置に0-255を書き込む
  i++;
  if(i==512) i=0;
}

下はTinkercadのシミュレーション実行例でシリアルモニタに"add:4"が表示されたタイミングでリセットボタンを押している。最初のループではadd:0~add:4で読み出したデータはすべて0で、リセット後はadd:0から0,1,2,3とリセット前に書き込まれたデータが読み出されていることがわかる。add:4以後はリセットしたのでデータは0のままになる。

"EEPROMのデータ保存確認"
EEPROMのデータ保存確認

なお実機でEEPROMに書き込む場合は書き込める回数に上限があるので頻繁に書き込みを行うときには注意が必要である。

4. まとめ

 今回はArduinoのEEPROMへのデータの書き込み・読み出し方法とTinkercad上で書き込んだデータがメモリに保存されていることの確認方法について紹介した。