앞서 언급했듯이 문제를 찾기 위해 모든 코드를 얻는 것이 좋습니다. 설정을 처리 할 때 "bufferUntil()"함수를 추가하지 않았다고 가정합니다. 따라서 serial이 값을받을 때마다 그냥 표시합니다. 나는 당신에게 해결책을 제안 할 수있다, 그것은 유일한 것이 아니지만 그것이 효과가있는 것처럼 보인다.
Arduino 코드에서 Serial.print() 대신 Serial.println()을 사용하여 메시지를 구분해야합니다.
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);
}
그래서 당신은 처리에
Rxx
Sxx
Txx
로 메시지를 보낼 것입니다, 당신은 기능 "bufferUntil (LF)"을 사용해야합니다. "/ n"을 수신 할 때까지 직렬 포트에서 모든 메시지를 저장합니다. 그런 다음 다른 함수를 사용하여 식별자와 값을 연결해야합니다.
// 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;
}
}
arduino 코드를 스냅 샷으로 제공하는 이유는 무엇입니까? 텍스트로 삽입하십시오. 처리 코드는 어디에 있습니까? – Piglet
가 방금 변경되었습니다. :) –