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

如何修复从Arduino串行端口到处理端口的慢速连接

臧翰采
2023-03-14

基本上,我试图使用力感应电阻器接收到的数据来改变处理草图背景的颜色。我遇到的问题是Arduino串行端口运行得很好/很快,但处理串行端口的速度非常慢/响应非常延迟。

我已经尝试在Arduino循环中添加延迟,但是当我添加那行代码时,我收到了一个NullPointerException错误,尽管我有一个默认的background_color变量值。我还尝试使用myPort。clear()函数在循环结束时执行,尽管我没有收到错误,但它会弄乱颜色并产生闪烁效果,因为值经常被清除。

这是arduino代码:

int A = A0;
int fsrreadingA;

int motorMap = 255; 
int forceMap = 300;
int scalar = 4;

void setup() {
  pinMode(A, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  fsrreadingA = analogRead(A) * scalar;
  int valA = map(fsrreadingA, 0, forceMap, 0, motorMap);

  analogWrite(3, valA);
  Serial.println(valA);

  delay(100);
}

这是处理代码:

import processing.serial.*;

Serial myPort;  
float background_color = 0;

void setup() {
  size(500,500);
  colorMode(HSB, 255);

  println("Available serial ports:");
  println(Serial.list());

  String portName = Serial.list()[1];
  myPort = new Serial(this, portName, 9600);
}

void draw() {  
  if (myPort.available() > 0) {
    background_color = float(myPort.readStringUntil('\n'));        
    println(background_color);

  }

  background(background_color,150,100);
}

我期望的是随着用户更多/更少地按下FSR,背景颜色会发生变化。它应该从棕色变为紫色/粉红色。我不知道该怎么办/如何修复NullPointerException错误。我应该采取不同的方法吗?

共有1个答案

桂坚
2023-03-14

你的Arduino似乎仍在以太快的速度发送数据,处理过程无法做出反应。

在处理端,你有一个FIFO缓冲区,因此如果你不能继续从RX缓冲区读取数据,你将开始删除最近收到的数据。

仅当ADC读数发生特定更改和/或读取后清除处理上的缓冲区时,您才可以尝试从Arduino发送数据:

myPort.clear() 

如果这两种方法都不能解决您的问题,您可能还在运行有缺陷的处理版本,您可能需要更新它。

 类似资料:
  • 首先,我知道这个问题被问了很多,但我找不到任何解决我问题的答案。因此,当我试图使用处理将数据写入Arduino的串行监视器时,它会说端口(在我的例子中是“com3”)正忙。我不知道它会忙些什么,因为我已经设置了串行监视器读数的延迟。 Arduino代码: 处理代码: 我知道这是非常基本的,但我在显示问题的同时,使代码尽可能小 提前谢谢

  • 问题内容: 我有一个Java程序,必须读取Arduino发送的信息。我从这里获取了Java代码。现在,我不太了解它是如何工作的,但是我尝试对其进行修改,并且得到了以下信息: 我创建一个对象串行COM口,我需要在主程序,然后我使用和当我需要它。 效果很好,Arduino获取数据并将其显示在LCD显示屏中。问题是。程序运行时,它会不断从串行端口读取数据(大约每40毫秒一次),但这并不意味着Arduin

  • 问题内容: 我想知道是否有一种方法可以通过PHP读取我的串行端口-可行:-) 在练习Arduino技能时,我开发了一个简单的LED ON / OFF草图。通过在串行监视器中 打开 或 关闭 它可以工作。 下一步,我整理了一个网页,充当GUI界面,以单击链接并执行上面的打开和关闭功能。该基于Web的GUI可通过PHP使用。我正在使用PHP SERIAL 类与Arduino使用的串行端口进行交互。 问

  • 我想知道是否有一种方法可以通过PHP来完成对串行端口的读取——有效:—— 在练习Arduino技能时,我设计了一个简单的LED开关示意图。它通过在串行监视器中输入on或off来工作。 下一步,我把一个网页放在一起,作为一个GUI界面,点击一个链接并执行上面的开关功能。这个基于网络的GUI通过PHP工作。我使用PHP串行类与Arduino使用的串行端口进行交互。 问题是我需要找到一种从串口获取反馈的

  • 我尝试做的是:Processing 3通过我的网络摄像头接收一种二维码-- 问题是:Processing 3和Unity都使用相同的端口(COM4,9600)。这将导致Unity中出现IO异常,表示“访问被拒绝”,随后出现串行端口未打开的错误。 处理3代码 Arduino代码 统一代码 我们显然无法在Unity中打开端口,因为它已经被处理3使用。如何解决这个问题?通信流: 最终,Unity需要根据

  • 我试图让Arduino在串口读取字符“s”时触发一个中继。该字符“s”由python根据从屏幕读取的图像发送。 我的问题是arduino似乎无法从串行端口读取数据,因为它从不执行if条件。我的猜测是这两者之间存在某种死锁(这就是为什么我将ardu.close()放在函数foo中) 这是我的arduino代码: 这是我的python代码: