2012-09-24 4 views
1

나는 processing을 사용하고 있으며 직렬 포트로 Arduino에서 입력을 읽었지만 연결이 끊어 질 수 있습니다.이 경우 연결을 다시 열려면 어떻게해야합니까?처리시 직렬 포트를 다시 연결

+0

처음에 연결을 설정 한 방법에 어떤 문제가 있습니까? –

+0

예를 들어, USB 케이블을 분리했다가 다시 연결하면 가까운 곳에서 직렬 포트를 다시 연결할 수 없으며 소프트웨어를 다시 열 수 없습니다. – ademar111190

+0

질문에 어떤 것들이 연결을 끊어 버리십니까? (USB 분리 및 기타 해당되는 경우 포함) – ZnArK

답변

4

당신은 일반적으로 시리얼 포트를 더 이상 사용할 수 나타 내기 Serial.java에 의해 슬로우들이 RuntimeException을 잡을 수 있습니다. 그런 다음 catch 블록 내에서 직렬 포트 폴링을 시작할 수 있습니다. 일단 Serial 인스턴스를 다시 인스턴스화 할 수있게되면 포트를 다시 사용할 수 있습니다 (예 : USB 케이블이 다시 연결됨). 그러면 게임을 다시 시작할 수 있습니다.

Serial serial; 
boolean serialInited; 

void setup() { 
    initSerial(); 
} 

void draw() { 
    if (serialInited) { 
     // serial is up and running 
     try { 
      byte b = serial.read(); 
      // fun with serial here... 
     } catch (RuntimeException e) { 
      // serial port closed :(
      serialInited = false; 
     } 
    } else { 
     // serial port is not available. bang on it until it is. 
     initSerial(); 
    } 
} 

void initSerial() { 
    try { 
     serial = new Serial(this, Serial.list()[0], BAUD_RATE); 
     serialInited = true; 
    } catch (RuntimeException e) { 
     if (e.getMessage().contains("<init>")) { 
      System.out.println("port in use, trying again later..."); 
      serialInited = false; 
     } 
    } 
} 

오히려 마다 프레임을 다시 연결하지는 않고, 대신 재 연결 시도의 주파수를 제한하는 카운터를 사용할 수도 있습니다. (예 : 10으로 계산하고 다시 시도하고 필요에 따라 반복하십시오.) 그다지 중요하지 않지만 직렬 포트에서 힘들게 두드리는 것은 내가 아는 것에 의한 예기치 않은 부작용이있을 수 있습니다.

+0

감사합니다 잘 작동합니다,이 같은,하지만 같은 일을합니다. :) – ademar111190

3

Arduino IDE에서 직렬 포트 모니터를 닫은 다음 [Tools] -> [Serial Port]로 돌아가서 직렬 포트를 다시 선택해야합니다.

케이블을 분리하면 이전에 사용하던 직렬 장치가 제거되기 때문입니다. 리눅스는 윈도우보다 더 잘 처리하지만, 어느 쪽이든, 시리얼 모니터로 혼란을 일으킨다.

USB 케이블을 제거하는 대신 보드의 재설정 단추를 눌러 프로그램을 다시 시작해야합니다.

또한 많은 Arduinos에는 직렬 통신의 자동 재설정 기능인 "기능"이 있습니다. 나는 회피 경로를 here에 게시했다.

enter image description here

+0

감사합니다. 작동하지만 사용자 개입없이 코드가 필요합니다. :) – ademar111190

관련 문제