我正在开发 Arduino 360 雷达,我的 arduino 正在正确发送信息,并且处理应用程序也可以正确接收信息,但是当我尝试将数据保存到数组中时,它不会更新值。
该设备有两个背靠背放置的 HCSR04 和一个从 0 旋转到 179 再返回到 0 的伺服器,Arduino 通过串行发送数据“Angle,Distance_1,Distance_2”,Processing 毫无问题地获取它,您可以使用“”行在串行控制台中看到接收和解析的数据
print(serialdata[0]);
print(" ");
print(serialdata[1]);
print(" ");
print(serialdata[2]);
"
其中serialdata[0]采用角度,serialdata[1]为第一个距离,serialdata[2]为第二个距离,因此数据被正确接收,然后我想将其保存在360个元素的数组中(每度一个),第一个距离正确保存(0到179)但第二个距离未更新,当我在setup()函数中初始化数组时它保持为0,所以我认为问题出在“data[i+180”行] = int(serialdata[2]);”,我尝试过执行“data[int(i+180)] = int(serialdata[2]);”、“data[i+int(180)] = int(serialdata[2]);”但我还没有解决,我做错了什么?
非常感谢
import processing.serial.*; // invocar la librería Serial
Serial port; // se declara una variable para la com. serial
String serialin;
int data[] = new int[360];
PFont f;
void setup() {
port = new Serial(this, "COM3", 9600);
size(1280, 720);
f = createFont("Arial", 16, true); // Arial, 16 point, anti-aliasing on
textFont(f, 36);
frameRate(60);
for (int i = 0; i < 360; i++) {
data[i] = 0;
}
}
void draw() {
background(26, 26, 36, 200);
textSize(32);
stroke(255, 255, 255, 150);
fill(26, 26, 36, 200);
strokeWeight(3);
text("ghJ", 1150, 690);
circle(640, 360, 600);
circle(640, 360, 500);
circle(640, 360, 400);
circle(640, 360, 300);
circle(640, 360, 200);
circle(640, 360, 100);
for (int i = 0; i < 360; i++) {
point(640 + (100+data[i])*cos(radians(i)), 360 + (100+data[i])*sin(radians(i)));
}
while (port.available() > 0) {
serialin = port.readStringUntil(10);
try {
String serialdata[] = splitTokens(serialin, ",");
if (serialdata[0] != null) {
print(serialdata[0]);
print(" ");
print(serialdata[1]);
print(" ");
print(serialdata[2]);
print(" ");
int i = int(serialdata[0]);
data[i] = int(serialdata[1]);
data[i+180] = int(serialdata[2]);
print(data[int(serialdata[0])]);
print(" ");
println(data[int(serialdata[0])+180]);
}
}
catch (java.lang.RuntimeException e) {
}
}
}
最佳答案
我认为这应该有效。 尝试以整数形式打印值以确保转换正确。 如果字符串不可转换,则 int(string) 在处理中返回 0。例如,当字符串包含额外空格或\n 甚至 int("abc") 等不可转换形式时,返回 0。
while (port.available() > 0) {
serialin = port.readStringUntil(10);
try {
String serialdata[] = splitTokens(serialin, ",");
if (serialdata[0] != null) {
// Try adding these lines.
serialdata[0] = trim(serialdata[0]);
serialdata[1] = trim(serialdata[1]);
serialdata[2] = trim(serialdata[2]);
print(serialdata[0]);
print(" ");
print(serialdata[1]);
print(" ");
print(serialdata[2]); // Notice you are printing serialdata[2] in string form so this statement shows the correct value
print(" ");
// Try printing these values to confirm wether the conversions are correct
int i = int(serialdata[0]);
data[i] = int(serialdata[1]);
data[i+180] = int(serialdata[2]);
print(data[int(serialdata[0])]);
print(" ");
println(data[int(serialdata[0])+180]);
}
}
关于java - 处理不会用串行数据更新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59685147/