当前位置: 首页 > 知识库问答 >
问题:

处理-使用ReadStringTill()从Arduino丢失串行数据

蒋承教
2023-03-14

我一直在尝试为我的Arduino串行数据创建一个示波器。在Arduino串行绘图仪中,我可以获得合适频率的良好波形,但当我尝试将数据发送到处理时,它无法接收来自Arduino的所有数据。有办法解决这个问题吗?

阿杜伊诺

const int analogIn = A6;
int integratorOutput = 0;

void setup() {
  // put your setup code here, to run once:
  pinMode(3, OUTPUT);
  pinMode(2, OUTPUT);
  Serial.begin(115200);
}

void loop() {
  // put your main code here, to run repeatedly:
  
  integratorOutput = analogRead(analogIn);
  Serial.println(integratorOutput);
}

加工

void serialEvent (Serial port) {
  // get the ASCII string:
  String inString = port.readStringUntil('\n');
  if (inString != null) {
    inString = trim(inString);                // trim off whitespaces.
    inByte = float(inString);           // convert to a number.
    inByte = map(inByte, 0, 1023, 100, height-100); //map to the screen height.
    println(inByte);
    newData = true; 
  } 
}

谢谢

共有1个答案

秋兴思
2023-03-14

这是因为readString直到是一个非阻塞函数。让我们假设Arduino正在打印一行:12345\n每秒115200位的串行端口相对较慢,因此在某个时候接收缓冲区可能只包含消息的一部分,例如:1234。当port.readString直到('\n')被执行时,它不会在缓冲区中遇到\n,因此它失败并返回NULL。您可以像本例中一样使用缓冲区直到来解决这个问题

 类似资料:
  • 我正试图通过(伪)串行连接使用处理从Arduino读取100个传感器数据条目。我使用的加工草图如下: 不幸的是,通常我的data.txt文件中存储的条目不到100个,其中一些条目(大约3-5个)在其中显示换行符。我做错了什么?Arduino IDE的串行监视器未打开!

  • 我想做的是从我用Arudino制作的转速表电路中读取连续的数据流,然后将其输入处理;我已经使用下面的代码成功完成了: 我不确定如何处理数据,以便每当检测到某个值时,处理中都会发生事件。 编辑:有人建议关闭,所以我的问题是调用是一个阻塞调用,这意味着中的指令指针将保持在。指针将调用和,但永远不会到达启动串行端口的线路 建议的解决方案是将这些行移动到的顶部,并将作为的最后一行。我尝试了这个(我下面的代

  • 我正在用c写一个抖动缓冲程序来处理rtp包。这里rtp使用UDP传输,所以连接不可靠,包会不整齐,也会有一些包丢失。如果包的顺序发生变化,我会通过序号(在rtp报头信息中)来排列,但是我怎么处理或者补偿包丢失呢?(因为包丢失不在我手上) 注意:我正在处理h264作为有效负载,他们要求我只使用RTP报头

  • 我是新的处理和串行通信,我的问题似乎非常基本。我试图将数据从处理发送到Arduino,但似乎有些东西在翻译中丢失了。 在Arduino上,我做了一个超级简单的素描: 其目的是从串行数据中读取一个字节,然后将其写回,这样我就可以看到发生了什么。使用附带的串行监视器进行测试,结果与我预期的一样:输入“0”返回“48”。到现在为止,一直都还不错。 当我运行这个处理草图时,事情开始出错: 我希望这段代码能

  • 我对Arduino和Processing都比较陌生,我一直在开发一种利用两者之间串行通信的代码。我的Arduino代码从压电传感器读取并打印数值,然后将数值发送给Processing,Processing根据数值绘制特定形状。该代码以前已经工作过,但由于某种原因,它不再工作。一切都会编译,但当我运行处理代码时,草图窗口是空的,并且仍然是空的。有几次“错误,禁用serialEvent()”出现了,但

  • 我四处寻找,但找不到解决这个问题的办法。我正在用我能想到的最简单的例子来测试这个。这是处理代码: 如果我在串行监视器上查看输出,它会正确打印“012012012012012012012”等,没有任何问题。我写了一个简单的程序在处理中查看数据: 大多数情况下,它会打印垃圾: 偶尔它会输出正确的值: 看起来每个字节都向左移动了3位,尽管我不明白为什么每次运行程序时它的行为都不一样。有趣的是,如果我让a