我正在尝试构建一个自动流架系统来代替手动看板系统。我通过使用将超声波传感器连接到机架背面的Arduino进行工作。传感器读取从机架中最后一个盒子到它的距离。
其背后的想法是,当有人从机架中取出一个盒子时,其他盒子会向前滑动,并且从最后一个盒子到机架背面的距离会变大。距离量会触发一个信号给补货商。如果机架已满,则信号为绿色;如果还剩下几个盒子,则信号为黄色;如果剩下一个或没有盒子,则信号为红色。
Arduino代码运行正常,根据距离的不同,串行打印“绿色”,“黄色”或“红色”。
我遇到问题的地方是将该读数转换为视觉系统。我想在计算机屏幕上显示机架,每个机架都有一种颜色,以显示其库存量。我正在使用Processing进行处理,并且我已经成功地使它打印输出而不是Arduino,但是当我执行“ if”语句来检查从Arduino读取的字符串是否与预定字符串匹配时,我得到了空指针异常,不确定如何解决。
我需要if语句,以便如果串行打印显示为“绿色”,并且在黄色和红色相同的情况下,它将在该架子上显示绿色框。
import processing.serial.*;
Serial myPort; //Create object from serial class
String val;
String str1;
void setup()
{
str1 = "Green";
String portName = Serial.list()[1];
myPort = new Serial(this, portName, 115200);
size(500, 500);
line(5, 5, 5, 495); //these lines construct the flow rack diagram
line(5, 5, 495, 5);
line(495, 5, 495, 495);
line(5, 495, 495, 495);
line(250, 5, 250, 495);
line(5, 250, 495, 250);
}
void draw()
{
if (myPort.available()>0)
{
val = myPort.readStringUntil('\n');
}
if(val.equals(str1) == true){ //checks if val is Green
println(str1);
}
}
答案 0 :(得分:0)
NullPointerExceptions通常很容易修复。您所要做的就是在访问变量之前检查您尝试访问的变量是否为空,或者可以在顶部初始化变量:
//检查var是否为空技巧
void draw()
{
if (myPort.available()>0)
{
val = myPort.readStringUntil('\n');
}
if (val != null)
{
if(val.equals(str1) == true){ //checks if val is Green
println(str1);
}
}
}
//初始化技巧
Serial myPort = new Serial();
String val = "";
String str1 = "";
Btw应该首先为if语句为您做if(...!= null)技巧,因为myport也可能为null!
我认为您的问题不是NullPointerException,而是您的readStringUntill函数返回null的事实。您应该研究该函数并确保其正常工作(并为其提供正确的参数)。