Processing IDE 不直接从串口读取数据

Processing IDE doesn't read data right from serial

我正在尝试用 arduino ide 制作一个 arduino 项目并处理 ide。 我开始做一个简单的测试,看看我使用 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。我试图查看 google 但似乎找不到任何东西。 提前致谢,欢迎任何提示。

您正在从 Arduino 发送 ASCII 并在您的 Processing 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);
  ...
}