
Arduino Unoで内蔵メモリEEPROMを使って状態を保存する方法
はじめに Arduino Unoでデータを保存するには、SDカードを使う方法のほかに、内蔵EEPROMへ保存する方法があります。EEPROMは容量こそ小さいものの、電源を切っても残したい設定値やスイッチ状態を保存するには扱いやすいです。この記事ではEEPROMの読み書き、2つのLED状態を1バイトにまとめるビット演算、タクトスイッチで状態を切り替える例をまとめます。 Arduino Uno R3のEEPROM EEPROM(Electrically Erasable Programmable Read-Only Memory)は電気的に消去でき、プログラムで書き換え可能な不揮発性メモリです。Arduino Uno R3で1024バイトのEEPROMが内蔵されています。わずか1kB程度のメモリではありますが、プリセット値やちょっとした状態保存であれば十分使えます。ちなみにArduino Uno R4ではEEPROMの値は8kBへ拡張されてます。 EEPROMの使い方 Arduino IDEではEEPROMが簡単に使えるようにライブラリが内蔵されています。スケッチでEEPROMを使う場合は下記ヘッダをインクルードします。 #include <EEPROM.h> 次のようにしてEEPROMのサイズを取得できます。 unsigned int eeprom_size = EEPROM.length(); Serial.println(eeprom_size); データを読み込むread() read() 関数を使ってEEPROMから保存されている値を読み込みます。address には0〜1023の範囲で値を指定します。 int value = EEPROM.read(address) データを書き込むwrite() EEPROMへデータを書き込むには write() 関数を使います。 int value = 16 EEPROM.write(address, value) ただしArduino Uno R3は8ビットマイコンですから、write()で書き込める値 value は8ビットになります。つまり0〜255までの値となります。それ以上大きい値を書き込む場合は分割してメモリへ保存するなどの工夫が必要となります。 他にもEEPROMライブラリには update() get() put() といった関数が存在しますが、ここで紹介した read() と write() の2つを使えば十分事足りります。 EEPROMは何度でも無制限に書けるメモリではないため、センサ値のように毎秒変わるデータを保存し続ける用途には向きません。今回のように、ボタン操作で状態が変わったときだけ保存する使い方なら、EEPROMの性質に合っています。 https://docs.arduino.cc/learn/built-in-libraries/eeprom 【実践】2つのLEDの状態を保存する 2進数を使って2つのLEDの状態を記録する LEDの状態保存には次のように2進数を使うと便利です。今後、状態管理が複数に増えたときもプログラムを完結に書くことができます。 10進数 二進数 LED1 LED2 0 0x00 オフ オフ 1 0x01 オフ オン 2 0x10 オン オフ 3 0x11 オン オン Arduinoとタクトスイッチ、LEDの配線 ここでは実際にArduino Unoを使って、タクトスイッチでLEDを点灯させ、その状態をEEPROMに書き込んで保存してみます。Arduinoとタクトスイッチ、LEDは次のように配線しました。抵抗は220Ω〜1kΩ程度で構いません。タクトスイッチの片側はGNDに接地し、もう一方をArduinoのデジタルピンへ接続させます。 ...








