我正在使用处理2.2.1。我试过的代码如下,但它给出错误“错误,禁用COM14 null的serialEvent()”。我正在设计温度计,它将数据串行发送到计算机。请帮助我,我是新人。
import processing.serial.*;
Serial port;
String tempc="";
String tempf="";
String data="";
int index = 0;
PFont font;
void setup()
{
size(400,400);
port = new Serial(this, "COM14", 9600);
port.bufferUntil('.');
font = loadFont("AgencyFB-Bold-200.vlw");
textFont(font,200);
}
void draw()
{
background(0,0,0);
fill(46,209,2);
text(tempc,70,175);
fill(0,102,153);
text(tempf,70,370);
}
void serialEvent (Serial port)
{
data = port.readStringUntil('.');
data = data.substring(0,data.length()-1);
index = data.indexOf(",");
tempc = data.substring(0,index);
tempf = data.substring(index+1,data.length());
}
答案 0 :(得分:0)
请检查您的端口 COM14 是否存在且是否正确:
println(Serial.list());
。
答案 1 :(得分:0)
除了Darius'回答,在serialEvent()
中注意 Null 字符串或任何其他潜在的解析错误。
您可以尝试这样的事情:
void serialEvent (Serial port)
{
data = port.readString('.');
println("raw data"+data)
try{
data = data.substring(0,data.length()-1);
index = data.indexOf(",");
tempc = data.substring(0,index);
tempf = data.substring(index+1,data.length());
}catch(Exception e){
println("Error parsing:")
e.printStackTrace();
}
}
使用注意readString()
,因为在设置中调用了bufferUntil()
。
答案 2 :(得分:0)
// at the top of the program:
float xPos = 400; // horizontal position of the graph
float yPos = 300; // vertical position of the graph
float zPos = 300;
float regiypos = yPos;
float regizpos = zPos;
int par = 5;
import processing.serial.*;
Serial myPort; // The serial port
int lf = 10; // Linefeed in ASCII
String myString = null;
float num;
void setup () {
size(800, 600); // (Width, Height) window size
myPort = new Serial(this, "COM4", 115200);
background(#081640);
noLoop(); //-- Ne fussál folyamatosan
}
void draw () {
// draw the line in a pretty color:
stroke(#A8D9A7);
line(xPos-par,regiypos, xPos, yPos); // (x1,y1,x2,y2) Origó a bal felső sarokban
regiypos = yPos; // ami most új volt azt megőrzi, hogy legyen mivel összekötni
stroke(#ff00A7);
line(xPos-par,regizpos, xPos, zPos);
regizpos = zPos;
// at the edge of the screen, go back to the beginning:
if (xPos >= width) {
xPos = 0;
// clear the screen by resetting the background:
background(#EDA430);
background(#081640);
}
else {
// increment the horizontal position for the next reading:
xPos+=par;
}
}
void serialEvent (Serial myPort) { //-- Nem fut folyamatosan, hanem csak akkor ha adat érkezik, mert akkor meghívodik ez a fv.
// get the byte:
// float inByte = myPort.read();
// print it:
// println(inByte);
myString = myPort.readStringUntil(lf);
if (myString != null) {
print(myString); // Prints String
String[] q = splitTokens(myString,":");
if (q.length==2){
print(q[0]); // Acceltoroll print
print(q[1]); // Gyrotoroll print
num=float(q[0]); // Converts and prints float
yPos = height/2 - num;
num=float(q[1]); // Converts and prints float
zPos = height/2 - num;
redraw(); //-- Melynek a végén van a redraw() parancs, mely egyszer lefutattaja a draw()-ban lévő részt.
}
}
}
突出显示的部分是:
if (q.length==2) {
print(q[0]); // Acceltoroll print
print(q[1]); // Gyrotoroll print
num=float(q[0]); // Converts and prints float
yPos = height/2 - num;
num=float(q[1]); // Converts and prints float
zPos = height/2 - num;
redraw(); //-- Melynek a végén van a redraw() parancs, mely egyszer lefutattaja a draw()-ban lévő részt.
}
这将解决您的问题。问题是如果缓冲区已满并且开始覆盖数据,则q [1]可能不存在...