필자가 작성한 C# 어플리케이션에 블루투스 (블루스 미르호 금 장치)를 통해 통신하는 arduino 메가가 있습니다. arduino는 항상 32 문자의 직렬 신호를 보내고, 첫 번째는 항상 "S"이고 마지막은 "E"입니다. 퍼티를 사용하면이 신호가 정확하게 99 %의 시간 동안 전송되고 있음을 확인할 수 있습니다.안정된 블루투스 시리얼 통신을위한 통신 속도
public string receiveCommandHC()
{
string messageHC = "";
if (serialHC.IsOpen)
{
while (serialHC.ReadChar() != 'S')
{
}
messageHC = serialHC.ReadTo("E");
serialHC.DiscardInBuffer();
}
return messageHC;
}
serialHC 직렬 클래스입니다 :
지금 내가 다음 코드를하고있는 중이 야 내 C# 응용 프로그램으로이 신호를 읽고 싶어.
가끔은 완벽하게 작동하지만 다른 경우에는 문제가 발생하기 때문에 가끔은 작동하지만 다른 이유는 알 수 없습니다.
내가 가진 것처럼 보이는 문제는 내가 arduino에서 읽은 데이터에 약간 큰 지연을 가져 오는 경우가 있다는 것입니다. 버튼 상태를 보냈기 때문에이 사실을 알았고 실제로 버튼을 누르거나 아루 두이 노를 릴리스 한 후 몇 초만 바뀝니다. 블루투스 장치의 표준 전송 속도 인 115200을 사용하여 훨씬 낮은 속도로 변경하면 더 나은 결과를 얻을 수 있을지 궁금해하고 있습니까? 이점이 있으면 어떻게 될까요? 나는 높은 통신 속도를 필요로하지 않으며, 상태를 4-5 번 업데이트하는 것조차도 내 응용 프로그램에 허용 될 것입니다.
지연이 제 코드에서 오는 것이 가능합니까? 나는 그것이 "S"를 기다리고있는 while 회 돌이일지도 모른다라고 생각한다. 그러나 그 다음 나는 항상 고속으로오고있는 새로운 신호가 있기 때문에 왜 거기에 매달려야하는지 안다.
나는 오래된 데이터는 신경 쓰지 않고 그냥 건너 뛰고 싶기 때문에 DiscardInBuffer()를 사용하고 있습니다. 최신 데이터를 읽고 그 신선한 데이터에 대해 행동하는 것이 훨씬 더 중요합니다.
도움 주셔서 감사합니다.
안부,
벤더
업데이트 : debuging 동안
그냥 조금 더 정보를 알아 냈다.
블루투스를 통해 연결- 두 번째 블루투스 연결이 다른 장치 (다른 COM 포트와 다른 보드로 PC에서 설립
- (USB 케이블을 통해 전혀 지연 없음) : 문제에만 나타납니다 것 속도)
누구나 PC에서 동일한 블루투스 동글에서 두 개의 다른 장치를 실행하는 erxperiances가 있습니까? 나는 두 가지 문제에 모두 연결할 수 있지만 이전에 언급 한 지연 문제는 여전히 가지고 있습니다. 어떤 도움
receiveCommandHC() 호출을 트리거하는 데 사용 하시겠습니까? 이 루프가 명령을 정상적으로 수신 할 가능성이 있지만, 다음 몇 가지 incomming msg는 지연 중에 serialport에 의해 버퍼링됩니다. 가장 오래된 메시지가 먼저 읽히고 더 새로운 메시지가 삭제됩니다. 하나의 빠른 디버깅 실험은 더 이상 새로운 메시지가 버려지는지 확인하기 위해 삭제를 주석 처리하는 것입니다. 나는 지금 같은 전송 속도를 유지할 것이다. – jdh
안녕하십니까, 귀하의 응답을 주셔서 감사합니다, 나는 incomming 데이터를 읽는 모든 50ms를 실행하는 타이머를 사용하고 있습니다. – Bender
포트를 열 때 SerialPort가 DTR 신호를 보내는 것은 이상합니다. 이것을 명시 적으로 false로 설정하십시오. – leppie