Wie bereits erwähnt, ist es besser, den ganzen Code zu bekommen, um das Problem zu finden. Ich nehme an, Sie haben die Funktion "bufferUntil()" nicht in der Verarbeitung Setup hinzugefügt, so dass jedes Mal, wenn die serielle einen Wert erhalten, es nur anzeigen. Ich kann Ihnen eine Lösung vorschlagen, es ist nicht die einzige, aber es scheint zu funktionieren.
Auf Ihrem Arduino-Code sollten Sie anstelle von Serial.print() Serial.println() verwenden, um Ihre Nachricht zu trennen.
void setup() {
Serial.begin(9600);
}
void loop() {
int r = random(10,100);
int s = random(10,100);
int t = random(10,100);
Serial.println("R"+String(r));
Serial.println("S"+String(s));
Serial.println("T"+String(t));
delay(1000);
}
So werden Sie Nachricht als
Rxx
Sxx
Txx
Bei der Verarbeitung senden, müssen Sie die Funktion "bufferUntil (lf)" verwenden. Es speichert alle Nachrichten von der seriellen Schnittstelle, bis es "/ n" erhalten hat. Danach sollten Sie eine andere Funktion verwenden, um Ihren Bezeichner mit dem Wert zu verknüpfen.
// Example by Tom Igoe
import processing.serial.*;
Serial myPort; // The serial port
PFont myFont; // The display font
String inString; // Input string from serial port
int lf = 10; // ASCII linefeed
String data = "";
int R,S,T;
void setup() {
size(400,200);
// List all the available serial ports:
printArray(Serial.list());
// Open whatever port is the one you're using, mine is one.
myPort = new Serial(this, Serial.list()[1], 9600);
myPort.bufferUntil(lf); //delimiter of serial buffer end line
}
void draw() {
background(0);
text("received: "+" R="+R+" S="+S+" T="+T, 10,50); //Display value on the window
}
void serialEvent(Serial p) {
while(p.available()>0){
String buf=p.readString(); //Read serial input
println(buf);
if(!buf.equals('\n')) //delete null='/n' from arduino println()
data=buf; //Save buffer
}
/*char id=data.charAt(0); //Get id from buffer
int value=parseInt(data.substring(1,3)); //Get the value from buffer
identifyVariable(id,value); //Associate id and value*/
}
void identifyVariable(char ID, int value){
switch(ID){ //associate id with value
case('R'):
R=value;
break;
case('S'):
S=value;
break;
case('T'):
T=value;
break;
default:
println("error "+ID+" "+value);
break;
}
}
einen Grund, warum Sie Ihren Arduino-Code als Snapshot bereitstellen? Bitte fügen Sie es als Text ein. Wo ist dein Bearbeitungscode? – Piglet
gerade geändert! :) –