2017-12-18 3 views
-1

arduino 보드의 시리얼 신호를 처리 스케치로 가져와야합니다. "R12" "S40" "T80"과 같은 문자열 형식으로 값을 보냅니다. 문자를 세로로 인쇄 할 때 문자열을 캡처 할 때 (각 문자의 줄 바꿈) 누군가가이 문자열을 그대로 문자열로 가져 오는 방법을 말해 줄 수 있습니까? 우리는 보냈어. 내부 처리의 serialEvent 메서드를 넣을 수있는 코드가 필요합니다.Arduino - 시리얼 통신 처리

아두 이노 코드 :

void loop() { 
    int r = random(10,100); 
    int s = random(10,100); 
    int t = random(10,100); 
    Serial.print("R"+String(r)); 
    Serial.print("S"+String(s)); 
    Serial.print("T"+String(t)); 
    delay(1000); 
} 

처리 코드 :

String data = ""; 
int R,S,T; 
void serialEvent(Serial p) { 
    while(p.available()>0){ 
    data = p.readString(); 
    } 
    println(data); 
} 

나는 마지막으로 얻을 R S T 변수에 각각 R S T 값을 획득해야합니다.

감사합니다.

+2

arduino 코드를 스냅 샷으로 제공하는 이유는 무엇입니까? 텍스트로 삽입하십시오. 처리 코드는 어디에 있습니까? – Piglet

+0

가 방금 변경되었습니다. :) –

답변

2

앞서 언급했듯이 문제를 찾기 위해 모든 코드를 얻는 것이 좋습니다. 설정을 처리 할 때 "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; 
    } 
} 
+0

위대한, 고마워요! –