【问题标题】:Processing IDE doesn't read data right from serial处理 IDE 不能直接从串口读取数据
【发布时间】:2021-07-24 06:12:34
【问题描述】:

我正在尝试使用 arduino ide 和 processing 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 上运行所有这些。我试图在谷歌上看,但似乎找不到任何东西。 在此先感谢,欢迎任何提示。

【问题讨论】:

  • 除了比特率,还要配置数据、奇偶校验和停止位。 8-N-1 的东西,比如en.wikipedia.org/wiki/8-N-1
  • 我不这么认为,我按照教程进行操作,他们没有问题,我认为可能是外部问题,与代码无关,因为有时如果我打开处理它说端口很忙。
  • Serial.primtln 发送 ASCII 而不是二进制。 Fyi, 10, 13 数字序列是 ASCII 回车/换行符。 println 调用在打印参数后发送。 53 是 '5' 的十进制 ASCII。我认为您正在处理 IDE 代码中读取和打印 ASCII 值。尝试将数据读入char 而不是int 并打印出char 值。

标签: java arduino processing processing-ide


【解决方案1】:

您正在从 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);
  ...
}

【讨论】:

  • 非常感谢,我通过使用 readStringUntil 将读取的数据转换为字符串找到了解决方法,现在它可以按我的意愿工作,这很有帮助,我认为这是一个问题使用我的设置,因为我使用 sudo 运行 arduino,因为如果我不这样做,即使我授予权限,它也无法使用该端口,谢谢。
  • @Markus1997 是的,这是我要提到的另一种方法。您可以在接收器上将数据处理为 ASCII,将数据读取为字符串而不是数字。我假设你关心二进制数据,所以我提供了二进制方法。
猜你喜欢
  • 2014-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多