【发布时间】:2015-04-07 15:22:25
【问题描述】:
我正在从上传到 teensy 2.0 的 arduino 草图中读取串行数据/运行常规 arduino 时也会发生这种情况。然后,我将字符串拆分并使用 Processing 的 int() 函数转换为整数数组,以便能够触发声音。 arduino 草图正在读取电容传感器数据。它运行了大约 10-15 秒,然后开始抛出以下错误。
Exception in thread "Animation Thread" java.lang.NullPointerException
at processing.core.PApplet.parseInt(PApplet.java:9127)
at processing.core.PApplet.parseInt(PApplet.java:9113)
at NightGames_Tree.draw(NightGames_Tree.java:59)
at processing.core.PApplet.handleDraw(PApplet.java:2266)
at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:243)
at processing.core.PApplet.run(PApplet.java:2140)
at java.lang.Thread.run(Thread.java:695)
我的代码如下: 在 Arduino 中:
#include <CapacitiveSensor.h>
CapacitiveSensor cs_4_2 = CapacitiveSensor(4,2);
void setup()
{
cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF); // turn off autocalibrate on channel 1 - just as an example
Serial.begin(9600);
}
void loop()
{
long start = millis();
long total1 = cs_4_2.capacitiveSensor(30);
Serial.print(millis() - start); // check on performance in milliseconds
Serial.print("\t");
Serial.print(total1); // print sensor output 1
Serial.println("\t");
delay(100);
}
处理中:
import ddf.minim.spi.*;
import ddf.minim.signals.*;
import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.ugens.*;
import ddf.minim.effects.*;
import processing.serial.*;
Minim minim;
AudioPlayer tree1;
AudioPlayer tree2;
Serial myPort;
String val;
void setup(){
String portName = Serial.list()[12]; // calls on the port which teensy is on
myPort = new Serial(this, portName, 9600);
println(Serial.list()); // prints list of ports that processing can access
//setup sound
minim = new Minim(this);
tree1 = minim.loadFile("tree1.aif");
}
void draw()
{
if (myPort.available() > 0) {
val = myPort.readStringUntil('\n');
int[] list = int(split(val, '\t')); // splits string into list based on tab after
int sum = 0;
int sum1 = 0;
// print(list.length);
sum = sum + list[0];
sum1 = sum1 + list[1];
print(sum);
print('\t');
print(sum1);
print('\t');
print('\n');
//print(val);
if (sum1 > 500) {
tree1.play(0);
} else if (sum1 <500){
}
}
}
运行一段时间后出现错误时,Processing会高亮显示这行代码
int[] list = int(split(val, '\t'));
提前感谢您的帮助。我在 Mac 上运行它。
【问题讨论】:
-
你检查过
split的输出了吗?NullPointerException表示您正在尝试解析null参数。 -
谢谢 Khaled,最好的方法是什么?我正在打印下面拆分的值。
-
你可以使用
split,然后遍历结果数组并检查是否有null,打印出来的东西表明你找到了null值。 -
谢谢哈立德,检查 null 完全解决了这个问题。我用了一个布尔值。
标签: java arduino processing