当处理从Arduino读取时如何解决空指针异常

时间:2019-05-06 19:49:59

标签: nullpointerexception arduino processing

我正在尝试构建一个自动流架系统来代替手动看板系统。我通过使用将超声波传感器连接到机架背面的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);
     }
    }

1 个答案:

答案 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的事实。您应该研究该函数并确保其正常工作(并为其提供正确的参数)。