일상 박형

카테고리       

[복사하고 따라하는 아두이노] 아두이노 EEPROM(feat.put&get)

 

안녕하세요. 공대 박형입니다.

 

오늘은 아두이노 EEPROM put, get 함수 예제를 실습해보겠습니다.

 

아두이노 EEPROM에서는 5개의 함수가 있습니다.

 

1.write : EEPROM의 인덱스에 전달된 매개변수 값을 저장

2.read : 매개변수로 전달되는 인덱스에 저장되어 있는 1바이트값을 읽어와서 반환

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(){

}

 

 

 

실행 결과입니다.

 

 

 

 

 

 

다음 시간에는 아두이노 압력센서를 사용해보겠습니다.

 

궁금한 부분은 문의주시면 답변드리겠습니다.

 

읽어주셔서 감사합니다.

공유하기

facebook twitter kakaoTalk kakaostory naver band