我建立了一个实验室来测试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”。到目前为止,单片机中的RNG运行良好。
在PC处理pde代码中,如果我使用Math.random()作为本地RNG,它运行良好,如果我读取每一行并打印到控制台,它也运行良好。但是,如果我将它们合并在一起,draw()将绘制一些点然后停止.....
/*
* 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();
}
我选择了Processing,因为它是专为交互而设计的,可能代码中有一个错误,但我对它没有任何线索。
我应该将它实现为两个单独的线程,一个用于读取和推送到队列,另一个用于绘制?
答案 0 :(得分:0)
您是否只是生成无限的随机数?如果是这样,这是一个无限循环:
while (myPort.available() > 0) {
我应该将它实现为两个单独的线程,一个用于读取和推送到队列,另一个用于绘制?
可能不是。您可能只想一次读取一行。或者修改你的程序,这样它就不会发送无限的随机数。