Arduino - 处理串行通信

时间:2017-12-18 12:47:40

标签: arduino processing

我需要从arduino板获取串行信号到处理草图。我正在以#34; R12" " S40" " T80",当我从处理中捕获这些字符串时,它将垂直打印(每个字符的新行)任何人都可以告诉我如何将其作为字符串发送到我们发送的字符串。我需要一个可以放入内部处理的serialEvent方法的代码。

Arduino代码:

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

处理代码:

{{1}}

我需要将最后收到的R S T值分别输入R S T变量。

谢谢!

1 个答案:

答案 0 :(得分:2)

如前所述,最好让所有代码找到问题所在。 我想你没有添加函数" bufferUntil()"在处理设置中,所以每次串口收到一个值时,它只显示它。 我可以为你提出一个解决方案,它不是唯一的,但似乎有效。

在你的Arduino代码上,你应该使用Serial.println()来分隔你的消息,而不是Serial.print()。

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;
  }
}