Arduino - 处理串行通信
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Arduino - 处理串行通信相关的知识,希望对你有一定的参考价值。
我需要从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变量。
谢谢!
答案
如前所述,最好让所有代码找到问题所在。我想你没有在处理设置中添加函数“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('
')) //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 - 处理串行通信的主要内容,如果未能解决你的问题,请参考以下文章