[아두이노] 44. 병아리 부화기 및 육추기 겸용 만들기 (12) EEPROM 저장 소스 코드
임베디드/아두이노2024. 5. 31. 21:49
부화기 설정 값과 시간 등을 저장하기 위해서 EEPROM을 사용하여 저장하는 소스 코드 입니다.
EEPROM 에 대한 자세한 내용은 아래 글을 참고하시면 됩니다.
https://copynull.tistory.com/478
Incubator_Main.ino
...
#include <EEPROM.h>
...
extern unsigned long EggMoveTime;
extern unsigned long SaveTime; // 저장 시간
unsigned long nowTime = 0; // 현재타이머시간
...
long mode = 0; // 0 = 부화기, 1 = 육추기 모드
...
void setup()
{
...
// rom 저장 데이터 읽기
mode = EEPROM_Read(0);
nowTime = EEPROM_Read(1);
EggMoveTime = EEPROM_Read(2);
...
}
void loop()
{
...
if(millis()-beforeTime>=1000)
{
...
SaveTime++;
...
// 자동 저장
AutoSave();
...
}
...
}
_eeprom.ino
#define AUTO_SAVE_TIME (60*30) // 30분마다
unsigned long SaveTime = 0; // 저장 시간
// 롬 데이터 쓰기
void EEPROM_Write(int address, long value)
{
byte b4 = (value & 0xFF);
byte b3 = ((value >> 8) & 0xFF);
byte b2 = ((value >> 16) & 0xFF);
byte b1 = ((value >> 24) & 0xFF);
EEPROM.write(address * 4, b4);
EEPROM.write(address * 4 + 1, b3);
EEPROM.write(address * 4 + 2, b2);
EEPROM.write(address * 4 + 3, b1);
}
// 롬 데이터 갱신
void EEPROM_Update(int address, long value)
{
byte b4 = (value & 0xFF);
byte b3 = ((value >> 8) & 0xFF);
byte b2 = ((value >> 16) & 0xFF);
byte b1 = ((value >> 24) & 0xFF);
EEPROM.update(address * 4, b4);
EEPROM.update(address * 4 + 1, b3);
EEPROM.update(address * 4 + 2, b2);
EEPROM.update(address * 4 + 3, b1);
}
// 롬 데이터 읽기
long EEPROM_Read(int address)
{
long d4 = EEPROM.read(address * 4);
long d3 = EEPROM.read(address * 4 + 1);
long d2 = EEPROM.read(address * 4 + 2);
long d1 = EEPROM.read(address * 4 + 3);
return ((d4 << 0) & 0xFF) + ((d3 << 8) & 0xFFFF) + ((d2 << 16) & 0xFFFFFF) + ((d1 << 24) & 0xFFFFFFFF);
}
// 자동 저장
void AutoSave()
{
if(SaveTime >= AUTO_SAVE_TIME)
{
EEPROM_Update(0, mode);
EEPROM_Update(1, nowTime);
EEPROM_Update(2, EggMoveTime);
SaveTime = 0;
}
}
이로써 모든 코드가 완료되었습니다.
'임베디드 > 아두이노' 카테고리의 다른 글
[아두이노] 45. 병아리 부화기 및 육추기 겸용 만들기 (13) 최종 소스코드 프로젝트 파일 첨부 (0) | 2024.05.31 |
---|---|
[아두이노] 43. 병아리 부화기 및 육추기 겸용 만들기 (11) 버튼 소스 코드 (0) | 2024.05.31 |
[아두이노] 42. 병아리 부화기 및 육추기 겸용 만들기 (10) 1602 I2C LCD 소스 코드 (0) | 2024.05.30 |
[아두이노] 41. 병아리 부화기 및 육추기 겸용 만들기 (9) 가습&팬 소스코드 (0) | 2024.05.30 |
[아두이노] 40. 병아리 부화기 및 육추기 겸용 만들기 (8) 전구 HEAT 소스 코드 (0) | 2024.05.29 |