Я создал графический интерфейс пользователя с помощью обработки 3.3.7 на моем ПК.Микроконтроллер постоянно публикует данные через COM8 в виде
angle,distance.mindistance
, за которым следует новая строка.Я написал простой код на микроконтроллере, который циклически перебирает массив данных, чтобы убедиться, что графический интерфейс работает правильно.
Код, который запускается при обработке
- , считывает входящие данные вплоть до символа новой строки
- находит индекс
","
и "."
- присвойте что-либо между позицией
"0"
и индексом ","
переменной angle
- , присвойте что-либо между индексом
","
и индексом "."
переменной distance
- присвойте переменной с индексом
"."
и концом данных mindistance
- , выполните дальнейшую обработку и визуализируйте в графическом интерфейсе.
Проблема в том, что mindistance
всегда присваивается 0, что указывает на проблему с шагом 5:
См. void serialEvent (Serial myPort) {}
, но angle
и distance
отображаются правильно.
Соответствующие разделы моего кода следующие:
import processing.serial.*; // imports library for serial communication
import java.awt.event.KeyEvent; // imports library for reading the data from the serial port
import java.io.IOException;
Serial myPort; // defines Object Serial
String angle="";
String distance="";
String mindistance = "";
String data="";
String noObject;
float pixsDistance, pixsMinDist;
int iAngle, iDistance, iMinDistance;
int index1=0;
int index2=0;
PFont orcFont;
int linefeed = 10; // new line ASCII = 10
void setup() {
size (1600, 900);
smooth();
myPort = new Serial(this, "COM8", 115200); // starts the serial communication
myPort.bufferUntil(linefeed); //reads the data from the serial port up to the character 'n'. So actually it reads this: angle,distance.mindistance
orcFont = loadFont("OCRAExtended-30.vlw");
}
void serialEvent (Serial myPort) { // starts reading data from the Serial Port
// reads the data from the Serial Port up to the character 'n' and puts it into the String variable "data".
data = myPort.readStringUntil(linefeed);
data = data.substring(0, data.length()-1);
index1 = data.indexOf(","); // find the character ',' and puts it into the variable "index1"
index2 = data.indexOf("."); // https://processing.org/reference/String_indexOf_.html
angle= data.substring(0, index1); // read the data from position "0" to to the index of "."
distance= data.substring(index1+1, index2); // read the data between index of "," and index of "."
mindistance = data.substring(index2+1, data.length()); // read the data from index of "." to the end of the data
// converts the String variables into Integer
iAngle = int(angle);
iDistance = int(distance);
iMinDistance = int(mindistance);
}
void drawObject() {// limiting the range to 400 cm
// some more code here
}
--- EDIT ---
Я обнаружил, что mindistance
назначается с правильным значением (например, 40), но когда строка преобразуется в целое число iMinDistance = int(mindistance);
, iMinDistance
становится 0.