Как исправить медленное соединение от серийного Arduino до порта обработки - PullRequest
1 голос
/ 08 июля 2019

По сути, я пытаюсь использовать данные, полученные резистором, чувствительным к силе, для изменения цвета фона эскиза обработки. Проблема, с которой я сталкиваюсь, заключается в том, что последовательный порт 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 Ответ

0 голосов
/ 08 июля 2019

Кажется, ваш Arduino все еще отправляет данные слишком быстро, чтобы обработка реагировала.

На стороне обработки у вас есть буфер FIFO, поэтому, если вы не сможете продолжать чтение из буфера RX, вы начнете отбрасывать данные, полученные последними.

Вы можете попытаться отправить данные из Arduino только тогда, когда в показаниях АЦП произошло определенное изменение, и / или очистить буфер при обработке после чтения:

myPort.clear() 

Если ни один из этих подходов не решит вашу проблему, возможно, вы также используете некорректную версию Processing, возможно, вы захотите обновить ее.

...