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

时间:2019-07-08 16:13:40

标签: arduino processing

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

我尝试在Arduino循环中添加延迟,但是当我添加该行代码时,即使我有background_color变量的默认值,我也会收到NullPointerException错误。我还尝试在循环结束时使用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 个答案:

答案 0 :(得分:0)

您的Arduino似乎仍然以太快的速度发送数据,以至于处理无法响应。

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

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

myPort.clear() 

如果这两种方法均不能解决您的问题,则您可能正在运行错误版本的Processing,您可能需要对其进行更新。