2016-10-24 3 views
0

직렬 데이터를 한 줄씩 내보내는 arduino가 있는데, 이는 직렬 모니터를 볼 수 있기 때문에 작동합니다. arduino IDE에서 30 초마다 새로운 한 줄의 데이터가 나타납니다.한 줄이어야하는 ORSSerialPort 데이터가 여러 줄로 입력됩니다.

Swift를 사용하여 Mac 프로그램을 작성하는 중입니다. 각 좌표는 직렬 포트를 통해 들어오는대로 맵에 놓이며, ORSSerialPort 라이브러리를 사용하여 arduino에 연결하고 데이터를 수신합니다. 이것은 잘 작동하고 이전 버전의 기본 버전을 가지고 있었지만 GPS 데이터에 간격이 있다는 것을 알았습니다. (지도에서 작은 그룹으로 나타 났으며 그 사이에 눈에 띄지 않는 공간이 나타났습니다. .

지도를 만들기 전에 arduino IDE 직렬 모니터와 동일한 출력을 생성하는 각 GPS 데이터 라인이 추가 된 텍스트 필드가 있었기 때문에 모든 것이 잘 작동한다고 생각했습니다.

맵과 관련된 문제를 해결하려면 맵 코드를 제거하고 간단히 print()을 XCode IDE로 편집 한 다음 직렬 포트를 통해 들어왔다. 놀랍게도 데이터에 임의의 줄 바꿈이 있었는데 이유를 이해할 수 없습니다. 이 문제로 인해 arduino IDE와 텍스트 필드에서 한 줄로 나오는 이유를 알고 싶습니다. (각 쉼표에서 문자열을 분리하여 개별 값을 추출 할 수있는 문제가 발생했을 수 있습니다. XCode IDE에는 없으며 아마도 문자열을 가지고 작업 할 때마다 가능할 것입니다.

EDIT : 프린트를 Xcode IDE에 접두사로 붙이고 5 개의 plusses로 텍스트 필드에 출력 한 다음 5 개의 대시로 접미사를 붙인 다음 단일 보고서를 보낸 후 직렬 포트를 닫도록 설정합니다 (한 줄이어야 함). 데이터). 내가 얻은 결과는 세 줄로 끝나고, 접두사와 접미사와 대시가 각각 끝에 붙습니다. 한 줄 수 있어야 무엇을 보여주는, 아래의 사진을 참조하십시오

이유는 여러 줄에 걸쳐 통해 오는 라인의 마지막 문자를 받고에로 (개별 변수처럼 행동 데이터의 내 하나의 라인은 세미 콜론이 아닌 세 번째 줄의 마지막 문자를 반환합니다.

답변

0

추가되는 개행 문자가 삽입되어 있지 않을 수 있습니다. 오히려 ORSSerialPort (기본 POSIX API와 마찬가지로)는 데이터가 들어올 때 대리자에게 데이터를보고하기 만합니다. 특정 사용 사례의 경우 완전한 행만 필요하다는 것을 알 수있는 방법이 없습니다.

들어오는 데이터를 버퍼링하고 완전한 "회선"/ 패킷을 받았을 때만 처리해야합니다. ORSSerialPort에는 API가 포함되어 있습니다. ORSSerialPacketDescriptor. 여기에 해당 API에 대한 추가 문서가 있습니다. https://github.com/armadsen/ORSSerialPort/wiki/Packet-Parsing-API

이 API는 (아직) 끝 구분 기호 만 사용하는 것을 지원하지 않습니다. 구문 분석 루틴이 "게으른"이기 때문에 전체 패킷의 유효성을 검사해야합니다. 즉, 패킷의 끝에서 가능한 가장 작은 일치를 찾을 수 있습니다.

+0

감사합니다. 완벽하게 작동합니다. – HenryHunt

관련 문제