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

How to fix slow connection from Arduino serial to Processing port

基本上,我正在尝试使用力感应电阻器接收到的数据来更改处理草图的背景颜色。我 运行 遇到的问题是 Arduino 串行端口运行 fine/quickly,但处理串行端口令人难以置信 slow/has 一个真正延迟的响应。

我尝试在 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 more/less 而改变。它应该从棕色变为 purple/pink 颜色。我不确定如何 do/how 来修复 NullPointerException 错误。我应该采用其他方法吗?

您的 Arduino 发送数据的速度似乎仍然太快,Processing 无法做出反应。

在处理端,您有一个 FIFO 缓冲区,因此如果您无法继续从 RX 缓冲区读取数据,您将开始丢弃最近收到的数据。

仅当 ADC 读数发生特定变化时,您才可以尝试从 Arduino 发送数据and/or读取后清除处理中的缓冲区:

myPort.clear() 

如果这些方法都不能解决您的问题,您可能 运行 Processing 版本有问题,您可能需要更新它。