处理 IDE 不直接从串行读取数据

时间:2021-04-30 23:57:44

标签: java arduino processing processing-ide

我正在尝试使用 arduino ide 和处理 ide 制作一个 arduino 项目。 我开始做一个简单的测试,以查看使用 arduino ide 显示数字 0,1..9 的环境,但由于某种原因,处理 ide 无法正确读取它,我不知道为什么,它读取的是奇怪的数字从 10、13、53 等序列开始(只有这些数字,没有任何变化)。这是我的处理代码:

import processing.serial.*;
Serial port;

void setup() {
  port = new Serial(this,"/dev/ttyUSB0",9600);
}
void draw() {
  if(port.available() > 0) {
  int info = port.read();
  println(info);
  println("===");
  }
}

这是我的 arduino 代码:

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  int deg = 0;
  int data = 1;
  for (deg = 0; deg < 10; deg++) {
    Serial.println(deg);
    delay(15);
    delay(1000);
  }
}

此外,开发板和处理使用相同的端口 /dev/ttyUSB0。 我在 Ubuntu 20.04 上运行所有这些。我试图在谷歌上查看,但似乎找不到任何东西。 提前致谢,欢迎提供任何提示。

1 个答案:

答案 0 :(得分:3)

您正在从 Arduino 发送 ASCII 并在处理 IDE 中读取二进制文件。以下是您的发件人正在执行的操作:

for (deg = 0; deg < 10; deg++) {
  Serial.println(deg);
  ...
}

Serial.println 打印值,这意味着它被格式化以供显示。这意味着它已转换为 ASCII。其输出将是每个数字,ASCII 格式,后跟一个新行(因此是 println 函数中的“ln”):

48 10 13 49 10 13 50 10 13 ... 57 10 13

例如,Serial.println(0) 将产生 48 10 13,它是 0 的 ASCII 代码,后跟新的行序列 10 13(CR 和 LF)。

您的接收者正在这样做:

int info = port.read();
println(info);

这会将这些值读取为整数,并将这些数字格式化为带有新行的 ASCII 输出。所以你会在你的显示器上看到:

48 
10
13
...

解决此问题的最佳方法是从 Arduino 写入二进制数据,而不是打印数据。在您的 Arduino 上,改用 Serial.write()

for (deg = 0; deg < 10; deg++) {
  Serial.write(deg);
  ...
}