Ich baue ein Labor, um Zufallszahlengenerator in MCU zu testen. MCU generiert Randrom im Bereich von (0,255) und sendet sie an PC. Im PC habe ich ein Bearbeitungs-PDE geschrieben, um Zeile für Zeile zu lesen und sie als x, y zu zeichnen, um die zufälligen Punkte zu zeichnen.Verarbeitung zeichnen() blockiert, sobald Daten über die serielle Schnittstelle
My MCU druckt, wie folgend:
141,188
255,198
193,224
83,138
53,68
231,142
233,232
187,210
221,204
207,86
17,240
...
Die Zufallszahlen werden als "% d,% d \ r \ n" gedruckt. Bis jetzt funktioniert RNG in MCU gut.
In PC-Verarbeitung pde-Code, wenn ich Math.random() als lokale RNG verwenden, funktioniert es gut, wenn ich jede Zeile lesen und drucken, um Konsole, es funktioniert auch gut. Allerdings, wenn ich sie zusammen verschmelzen, die draw() werden einige Punkte zeichnen und dann abgewürgt .....
/*
* 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();
}
ich Verarbeitung ausgewählt, weil es für die Interaktion ausgelegt ist, vielleicht gibt es einen Fehler im Code, aber Ich habe keine Ahnung davon.
Sollte ich es als zwei separate Threads implementieren, einen zum Lesen und Push in die Warteschlange, und den anderen zum Zeichnen?
Da weiß ich nicht wann der Generator den (256,256) Bereich auffüllen kann. Also habe ich Endlosschleife benutzt. Ich werde versuchen, wxPython zu verwenden, alternativ werde ich mehr zufällige Daten in einem längeren Byte wie 128B mit \ r \ n drucken. Immerhin spielt das Zeitintervall keine Rolle. –