?>

Hard Copy World

HCW

Q&A

Home > Forum >

Q&A

[질문]아두이노 메가(Mega)와 double 형 변수 사용

페이지 정보

작성자 돌메 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일16-06-16 17:10 조회1,393회 댓글4건

본문

아두이노 Mega를 이용하고 있습니다.

GPS에서 수신한 좌표를 수집서버로 전송해야 하는데,

서버에서 수신하는 GPS 좌표가 8바이트 double 형으로 규정되어 있습니다.

아두이노 Mega는 float / double 모두 4바이트로 되어 있는데요..

$GPGGA,064951.000,2307.1256,N,12016.4438,E,1,8,0.95,39.9,M,17.8,M,,*65<CR><LF>

GPS에서는 $GPGGA Format으로 위도/경도 좌표가 텍스트(Ascii)로 수신되고,

이를 double 형 변수로 치환하여 전송하면 되는데..

문제는 Arduino가 double 변수가 4바이트라 좌표 정보가 정확하지 않다는 것이지요. 소숫점

둘째자리부터 loss가 생깁니다.

ㅠ.ㅠ;;

제가 원하는 것은 GPS 모듈에서 받은 텍스트의 GPS 좌표 (2307.1256) 를 8바이트 double 형 변수 또는

8 바이트 배열에 넣고 싶습니다.

위도 자료 : 2307.1256

double 형 변수: double latitude = 2307.1256

byte latitude[8];

latitude[0] = 0xC1;

latitude[1] = 0xA8;

latitude[2] = 0xA4;

latitude[3] = 0x4E;

...

latitude[7] = 0x40;

즉, double 형 변수가 갖는 비트 형태만 갖추어서 서버로 전송하면 됩니다.

그 이후는 서버에서 double 형 변수로 변환하여 처리하면 되니까요.

어떤 방법이 있을까요?

감사합니다.

댓글목록

최고관리자님의 댓글

최고관리자 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 작성일

데이터가 float 으로 저장되어 버리면 소실된 정확도는 복구가 안됩니다. 텍스트를 읽을 때 double 형 변수 미리 만들어두고 여기에 써야할 것 같습니다.
제 생각엔 1111.2222 텍스트를 소수점 앞 뒤로 구분해서 2개의 int 형 데이터로 추출하고, 이후 double 형으로 만들던지 그냥 2개의 int를 전송하면 될 것 같습니다.

돌메님의 댓글

돌메 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

double 형 변수 자체를 만들 수 없습니다. arduino mega에서 double형으로 선언할 수 있으나, 내부적으로  float이기 때문에 값을 넣는 순간 소숫점 자릿수에서 버려지는 현상이 생겨 double형의 정확도를 구성할 수 없습니다. 어떤 트릭으로 그냥 배열 8개에 double 형 변수의 비트 패턴을 만들어 내는 것이 목표입니다.

최고관리자님의 댓글

최고관리자 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 댓글의 댓글 작성일

아.. 찾아보니 float과 double 이 완전히 동일하네요. 4byte double형으로 만들고 싶으시면 아래 링크에 있는 double형 구조대로 저장하시면 될 듯 합니다.
http://blog.naver.com/PostView.nhn?blogId=blueslame&logNo=110006624513