Как исправить исключение нулевого указателя при обработке чтения из Arduino - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь создать автоматическую систему стеллажей для замены ручной системы Kanban. Я работаю, используя Arduino с ультразвуковым датчиком, прикрепленным к задней части стойки. Датчик считывает расстояние от последней коробки в стойке до нее.

идея заключается в том, что, когда кто-то снимает ящик со стойки, другие ящики выдвигаются вперед, и расстояние от последнего ящика до задней части стойки увеличивается. Величина расстояния вызывает сигнал для пополнения запаса. Сигнал зеленого цвета, если стойка заполнена, желтого цвета, если осталось еще несколько ящиков, и красного цвета, если один из них не заполнен или отсутствует.

Код Arduino работает нормально, и в зависимости от расстояния он печатает «Зеленый», «Желтый» или «Красный».

Там, где у меня возникают проблемы, это перевод этих показаний в визуальную систему. Я хочу, чтобы стойка на экране компьютера отображала цвет каждой полки, чтобы показать, насколько она укомплектована. Я использую Обработка, чтобы сделать это, и у меня был успех, заставляя его печатать вывод вместо 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 голосов
/ 06 мая 2019

NullPointerException Исключения обычно легко исправить.Все, что вам нужно сделать, это проверить, является ли переменная, к которой вы пытаетесь обратиться, нулевой, прежде чем обращаться к ней, или вы можете инициализировать ваши переменные сверху:

// проверить, является ли переменная пустым трюком

 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 должен сделать то же самое, если (...! = Null) трюк для вас первым оператором if, поскольку myport тоже может быть нулевым!

Iдумаю, что ваша проблема не в NullPointerException, а в том, что ваша функция readStringUntill возвращает ноль.Вы должны изучить эту функцию и убедиться, что она работает правильно (и что вы даете ей правильный параметр).

...