处理平局()只要通过串行端口

问题描述:

接受数据I建立一个实验室中的MCU来测试随机数发生器档。 MCU在(0,255)范围内生成randrom,并将它们发送到PC。在PC中,我写了一个处理pde逐行读取并绘制为x,y绘制随机点。处理平局()只要通过串行端口

我的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 \ n” 个。到目前为止,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(); 
} 

我挑选处理,因为它是专为互动,也许是在代码中的错误,但我对此毫无头绪。

我应该实现这两个独立的线程,一个用于读取和推排队,另一个用于绘图?

你只是产生无限的随机数?如果是这样,这是一个无限循环:

while (myPort.available() > 0) { 

我应该实现这两个独立的线程,一个用于读取和推排队,另一个用于绘图?

可能不是。你可能只想一次读一行。或者修改你的程序,使其不发送无限的随机数。

+0

因为我不知道什么时候该发生器可以填补(256,256)的区域。所以我使用了无限循环。我将尝试使用wxPython的,或者我会在一个较长的字节打印更多的随机资料,如128B与\ r \ n。毕竟,时间间隔并不重要。 –