Я читаю серийные данные из эскиза arduino, который я загрузил в teensy 2.0/это также происходит при запуске обычного arduino. Затем я разделяю строки и преобразую их в целочисленный массив с функцией обработки()(), чтобы иметь возможность запускать звуки. Эскиз arduino считывается в емкостных данных датчика. Он работает хорошо около 10-15 с, а затем начинает выдавать следующую ошибку.Обработка последовательного чтения от Arduino, вызывающего ошибку Java PApplet
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){
}
}
}
Когда ошибка появляется после запуска на некоторое время , Обработка подчеркивает эту строку кода
int[] list = int(split(val, '\t'));
Заранее благодарим за любую помощь. Я запускаю это на Mac.
Вы проверили выход «split»? «NullPointerException» означает, что вы пытаетесь проанализировать аргумент «null». –
Спасибо, Халед, какой был бы лучший способ сделать это? Я печатаю значения из разделенного ниже. – Alien
Вы можете использовать 'split', затем перебрать полученный результирующий массив и проверить, что что-то« null », распечатать что-то, чтобы указать, что вы нашли значение« null ». –