java - 处理不会用串行数据更新数组

标签 java arduino processing

我正在开发 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/

相关文章:

立即返回提示的 Java 应用程序

java - 在 java 中比较 TSV 文件和 Hbase 表中的值

java - 如何为低于 28 的 API 在铃声实例上启用循环?

android - Arduino 和 Android 之间的蓝牙串口通信问题

Java arraylist之arraylist - 用类对象创建多维arraylist

java - 如何使用 "Processing"在屏幕上绘制完全填满窗口的 N*N 网格

java - 使用 Scanner 类解析文本文件并通过多个循环计数模式出现次数

iOS 低功耗蓝牙 (BLE) 未发现 TX 特性

Arduino步进器

d3.js - 数据可视化初学者 : Learn processing, d3.js 还是其他先?