3.update : EEPROM의 인덱스에 저장된 ㄱ밧이 전달된 매개변수 값과 다를 경우 값을 저장
4.put : EEPROM의 위치에 전달된 데이터(구조체)를 저장
5.get : 매개변수로 전달되는 위치에 저장되어 있는 데이터를 가져옴
이번 시간에는 put 와 get함수를 실습해 보겠습니다.
대체적으로 많이 사용하는 방법으로 구조체를 만들어 put함수를 이용해 EEPROM에 데이터를 넣는 프로그램 예제로 만들겠습니다.
앞서 설명한 read나 write함수는 1바이트의 데이터 크기만 읽거나 저장할 수 있습니다. 그렇기에 인덱스 값을 지정하여 원하는 위치에 저장된 값을 쉽게 계산할 수 있습니다. 하지만 한번에 큰 데이터나 여러 데이터를 저장하는데는 한계가 있습니다.
put이나 get함수를 사용하면 원하는 크기만큼 사용자가 정의하여 데이터 타입을 사용할 수 있습니다. 이러한 방법을 사용하기 위해서는 데이터가 저장된 위치를 sizeof 함수를 이용해 계산하여 사용해야합니다.
초기 위치값을 지정하고 각 타입(정수, 실수)의 sizeof를 계산하여 다음 정보를 저장 할 초깃값을 구합니다. 어떤 데이터가 어떤 형태로 저장되는지를 알고있어야 오류 없이 EEPROM을 사용할 수 있습니다.
코드로 실습해보시죠.
#include <EEPROM.h>
struct Aclass { // 구조체 Aclass의 문자변수 name과 정수변수 age로 구성
char name[10];
int age;
}
void setup()
{
Serial.begin(9600);
int location = 0;
Aclass First = {"김민수", 14}; // 첫번 째 구조체에 저장
Aclass Second = {"박수민", 72}; // 두번 쨰 구조체에 저장
EEPROM.put(location, First); // 구조체 첫 번째 값을 EEPROM 0번부터 저장
location += sizeof(Aclass); // location 변수의 크기를 첫 번째 구조체에서 사용한 크기만큼 더함
EEPROM.put(location, Second); // 구조체 두 번째 값을 EEPROM 0번에서 첫 번째 구조체 크기만큼 더한 자리에서부터 저장
}
void get_Aclass(int location)
{
Aclass
}
void loop(){
}
이 코드를 업로드하면 아두이노 EEPROM에 데이터가 저장되었습니다. 이제 저장된 데이터를 불러오겠습니다.
#include <EEPROM.h>
struct Aclass {
char name[10];
int age;
};
void setup()
{
Serial.begin(9600);
int location = 0;
get_Aclass(location); // 사용자 정의 함수를 동작함
location+=sizeof(Aclass); // location 변수의 크기를 첫 번째 구조체에서 사용한 크기만큼 더함
get_Aclass(location);
}
void get_Aclass(int location) // 편의를 위해 사용자 정의 함수를 만들어서 사용
{
Aclass People; // 구조체를 새로 만들고 그 곳에 EEPROM에 저장되어 있는 숫자를 입력
EEPROM.get(location, People);
Serial.print("첫 번째 학생 ");
Serial.print(People.name);
Serial.print("의 나이는 ");
Serial.print(People.age);
Serial.println("살 입니다.");
}
void loop(){
}