', { cookie_domain: 'auto', cookie_flags: 'max-age=0;domain=.tistory.com', cookie_expires: 7 * 24 * 60 * 60 // 7 days, in seconds }); 이케아 SKARSTA 자동화 #5 - eeprom.put()의 float 저장 문제 해결. :: MakerLee's Workspace
728x90

if 문으로 도배를 하다가 너무 복잡해져서 싹 지워버렸습니다. 

그리고 각 일반 모드, 저장 모드, 로드 모드로 동작 모드를 분류하고 switch-case 문으로 정리했습니다. 

이렇게 하니 훨씬 깔끔하네요

 

 

 

 

 

 

 

높이값을 저장하는 부분에서 좀 문제가 있었습니다. 

EEPROM.write 는 byte 값만을 저장합니다.

제가 쓰는 높이값 float는 EEPROM.put 을 이용해 저장하고 EEPROM.get으로 로드합니다. 

그런데 위치를 여러개 저장하면 자꾸 오버플로가 일어나더군요. 

사용에 문제가 있었나 하고 구글링을 해봐도 다들 EEPROM.write 대신 EEPROM.put을 쓰면 된다는 식으로만 소개하고 있었습니다. 

 

 

 

 

 

 

 

EEPROM만을 확인하는 테스트 코드를 짜봤습니다. 

연달아 값을 저장하고 로드해보니 힌트가 보였습니다. 

어떤 값을 저장하던 마지막 값은 정상이고 그 전 어드레스의 값은 오버플로가 나네요

어드레스를 1,2,3 순으로 1씩 증가시키던 것을 2씩 증가, 3씩 증가로 바꿔봤습니다. 

5씩 증가할때부터 정상으로 입출력이 됩니다. 

즉 값을 어드레스 0 = 72.54, 어드레스 5=83.26, 어드레스 10=90.92 이런 식으로 띄워 저장하면 됩니다.

생각해보면 EEPROM의 메모리는 정해져 있는데 byte 자리에 float값을 똑같이 집어넣을 수 있으면 말이 안되겠지요. 

헤더파일에서 알아서 처리해주는가 싶었는데 그렇지 않고 사용자가 직접 처리해야 하는 거였습니다. 

 

 

 

 

 

이제 잘 저장되고 로드됩니다. 

 

 

 

 

 

 

 

728x90

+ Recent posts