2017-09-26 4 views
0

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?

Antwort

0

Generieren Sie einfach unendliche Zufallszahlen? Wenn ja, dann ist dies eine Endlosschleife:

while (myPort.available() > 0) { 

Soll ich es als zwei separate Threads implementieren, eine zum Lesen und Push-to-Warteschlange, und die andere zum Zeichnen?

Wahrscheinlich nicht. Sie möchten wahrscheinlich nur eine Zeile gleichzeitig lesen. Oder ändern Sie Ihr Programm so, dass es keine unendlichen Zufallszahlen sendet.

+0

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. –

Verwandte Themen