2017-09-26 6 views
0

MCU에서 난수 생성기를 테스트하는 실험실을 구축합니다. MCU는 (0,255) 범위의 randrom을 생성하여 PC로 보냅니다. PC에서, 나는 한 줄 한 줄씩 읽고 임의의 점을 그리기 위해 x, y로 그리는 처리 pde를 작성했다. 다음과 같은시리얼 포트를 통해 데이터를 받아들이 자마자 draw()가 멈 춥니 다.

내 MCU 인쇄 아웃 :

141,188 
255,198 
193,224 
83,138 
53,68 
231,142 
233,232 
187,210 
221,204 
207,86 
17,240 
... 

랜덤 숫자 "%의 D, D %의 \ R \ 없음"으로 출력된다. 지금까지 MCU의 RNG가 잘 작동합니다.

PC에서 pde 코드를 처리 할 때 Math.random()을 로컬 RNG로 사용하면 각 행을 읽고 콘솔로 인쇄하면 제대로 작동합니다. 이 상호 작용을 위해 설계 되었기 때문에

/* 
* Random_Serial_2D.pde 
*/ 

import processing.serial.*; 
import java.util.StringTokenizer; 

Serial myPort; // The serial port 
String inString = null; 

void setup() { 
    size(256, 256); 

    noSmooth(); 
    background(0); 
    translate(0,0); 

    stroke(255); 

    printArray(Serial.list()); 
    myPort = new Serial(this, Serial.list()[0], 9600); 
} 

void draw() { 
    int x, y; 
    String[] sa = null; 
    int sz; 

    while (myPort.available() > 0) { 
    myPort.bufferUntil('\n'); 
    if (inString != null){ 
     //print(inString); 
     inString = inString.replace("\r\n",""); 
     sa = inString.split(","); 
     sz = sa.length; 

     if (sz==2){ 
     x = Integer.parseInt(sa[0]); 
     y = Integer.parseInt(sa[1]);   
     point(x,y);  
     } 
     inString = null; 
    } 
    } 
} 

void serialEvent(Serial p){ 
    inString = p.readString(); 
} 

내가 처리를 집어 ..... 내가 함께 병합하는 경우에는 추첨()가 몇 가지 포인트를 그릴 것입니다 후 포장 마차, 아마도 거기에 코드에서 버그가 있지만, 그것에 대한 단서가 없습니다.

두 개의 별도 스레드로 구현해야합니까? 하나는 읽기 및 대기열로 푸시하고 다른 하나는 그리기로 사용 하시겠습니까?

답변

0

무한한 임의의 숫자를 생성하고 있습니까? 그렇다면,이 무한 루프는 다음과 같습니다

while (myPort.available() > 0) { 

나는 두 개의 별도 스레드, 읽기 하나를 구현하고 대기열에 밀어 그리기 위해 다른할까요?

아마도 그렇지 않습니다. 한 번에 한 줄씩 읽고 싶을 것입니다. 또는 무한한 난수를 보내지 않도록 프로그램을 수정하십시오.

+0

발전기가 언제 (256,256) 영역을 채울 수 있는지 알 수 없으므로. 그래서 무한 루프를 사용하고있었습니다. 나는 wxPython을 사용하려고 시도 할 것이다. 택일 적으로 128B와 같이 더 긴 바이트로 더 많은 랜덤 데이터를 \ r \ n 인쇄 할 것이다. 결국, 시간 간격은 중요하지 않습니다. –