댓글 쓰기 권한이 없습니다. 로그인 하시겠습니까?
|
Pi
2019.12.24 13:18
아두이노 데이터 저장하기(Arduino EEPROM 사용하기)
조회 수 35119 댓글 0
https://kocoafab.cc/tutorial/view/106 EEPROM2014-08-12 11:37:39 EEPROM을 사용해 보자
다만 사용횟수에 제한이 있고(약 10만번 정도) 용량이 일반 하드디스크를 생각한다면 터무니없이 작기 때문에 삽입할 데이터의 크기와 메모리의 크기를 비교하여 잘 사용하여야 한다. 아두이노 우노에는 1KB의 EEPROM이 존재하며 아두이노 메가에는 4KB의 EEPROM이 존재한다. 아두이노로 EEPROM을 사용하기 위해서는 EEPROM라이브러리를 사용하여야 하며 EEPROM라이브러리는 내장라이브러리로 존재한다. EEPROM
EEPROM_Write쉽게 예제소스를 사용해 보자. 예제 소스 중 eeprom_write을 읽어오자. ![]() /*
* EEPROM Write
*
* Stores values read from analog input 0 into the EEPROM.
* These values will stay in the EEPROM when the board is
* turned off and may be retrieved later by another sketch.
*/
#include <EEPROM.h>
//EEPROM의 처음 시작할 주소 지정
int addr = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
//아날로그 데이터는 1부터 1023까지 받을 수 있지만
//EEPROM은 255까지 밖에 못받기 때문에 / 4를 한다
int val = analogRead(0) / 4;
Serial.println(val);
//EEPROM에 아날로그 0번핀에서 받는 값을 입력한다
//이 값들은 전원이 나가도 저장된다
EEPROM.write(addr, val);
//주소를 1씩 증가시켜 다음 주소를 가져온다
//주소가 512가 되면 다시 0부터 시작한다
addr = addr + 1;
if (addr == 512)
addr = 0;
delay(100);
}소스를 분석하면 아날로그 0번핀에서 읽어오는 값을 4등분하여 그 값들을 차례대로 EEPROM 0번 주소부터 512번 주소까지 값을 쓰는것이다. //아날로그 데이터는 1부터 1023까지 받을 수 있지만 //EEPROM은 255까지 밖에 못받기 때문에 / 4를 한다 int val = analogRead(0) / 4; Serial.println(val); //EEPROM에 아날로그 0번핀에서 받는 값을 입력한다 //이 값들은 전원이 나가도 저장된다 EEPROM.write(addr, val); EEPROM은 바이트단위로 읽기때문에 데이터는 한 바이트로 표현가능한 0부터 255까지밖에 기록하지 못한다. 그렇기 때문에 아날로그핀에서 입력받은 0부터 1023까지의 데이터를 4등분하여 입력한다. 시리얼 모니터로 확인하면 아래와 같은 랜덤한 값들이 쓰이는것을 볼 수 있다. ![]() EEPROM_Read이제는 쓰인 값들이 제대로 쓰였는지 볼 차례다. 똑같이 예제를 불러오는데 이번에는 eeprom_read을 읽어오자. ![]() /*
* EEPROM Read
*
* Reads the value of each byte of the EEPROM and prints it
* to the computer.
* This example code is in the public domain.
*/
#include <EEPROM.h>
//주소는 0부터 시작하기 때문에 주소 초기값으로 0으로 지정
int address = 0;
byte value;
void setup()
{
//시리얼 통신을 시작하기 위해 초기화하고 속도를 9600으로 설정
Serial.begin(9600);
while (!Serial) {
; // 시리얼포트가 연결될 때까지 기다린다. 레오나르도 보드만 필요한 부분
}
}
void loop()
{
// EEPROM의 현재 주소에 있는 값을 value로 읽어 온다
value = EEPROM.read(address);
Serial.print(address);
Serial.print("\t");
Serial.print(value, DEC);
Serial.println();
// 현재주소에서 1 증가시켜서 다음 주소를 가져온다
address = address + 1;
// 주소가 512가 되면 주소를 다시 0으로 바꾼다
if (address == 512)
address = 0;
delay(500);
}시리얼 모니터창을 키게 되면 0번 주소부터 차례대로 쓰인값들을 볼 수 있다. ![]() EEPROM_Clear![]() 이제는 EEPROM에 쓰인 값들을 Clear해보자 예제소스에 있는 eeprom_clear을 불러와서 실행해보자. /*
* EEPROM Clear
*
* Sets all of the bytes of the EEPROM to 0.
* This example code is in the public domain.
*/
#include <EEPROM.h>
void setup()
{
// 0부터 512까지의 주소에 있는 값을 0으로 변경한다
for (int i = 0; i < 512; i++)
EEPROM.write(i, 0);
// 변경이 완료되면 13번 LED를 깜빡거린다
digitalWrite(13, HIGH);
}
void loop()
{
}예제소스에서는 for loop를 통해 0번 주소부터 512번 주소까지 데이터를 0을 입력하고 입력이 완료되면 13번 내장 LED를 켜는 방식으로 EEPROM을 clear시켰다. ![]() EEPROM 클리어 결과를 시리얼모니터로 확인하면 데이터가 0으로 바뀌었음을 알 수 있다. Dreamy의 코드 스크랩내가 모으고 내가 보는
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Designed by sketchbooks.co.kr / sketchbook5 board skin
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5