【问题标题】:How to fix slow connection from Arduino serial to Processing port如何修复从 Arduino 串行到处理端口的慢速连接
【发布时间】:2019-07-08 16:13:40
【问题描述】:

基本上,我正在尝试使用力感应电阻器接收到的数据来更改处理草图的背景颜色。我遇到的问题是 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 错误。我有什么不同的方法可以解决这个问题吗?

【问题讨论】:

    标签: arduino processing


    【解决方案1】:

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

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

    您可以尝试仅在 ADC 读数发生某种变化时从 Arduino 发送数据和/或在读取后清除处理中的缓冲区:

    myPort.clear() 
    

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

    【讨论】:

    • 我很确定我正在运行最新版本的处理,我已经尝试了你的第二个建议。不过,我不确定如何处理您的第一个建议,您有示例吗?
    • 只需在读取draw() 循环上的数据后立即刷新端口即可。如果您无法让它工作,您可以检查您的特定设置(SO、串行驱动程序、处理版本等)是否存在错误或不兼容。如果您在问题中包含所有这些,我可以提供帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    相关资源
    最近更新 更多