Error con la comunicación en serie entre el procesamiento y Arduino

0

Tengo un sensor que puede dar información sobre el movimiento de posición X e Y, y quiero crear una interfaz simple en la que un círculo en la pantalla se moverá en la misma dirección que muevo el sensor. Utilizo Arduino para enviar datos de posición (flotación) a través de la comunicación en serie.

Sin embargo, el código no parece funcionar bien. El círculo que creo, a veces desaparece de la pantalla, y después de un tiempo, vuelve a aparecer. Además, el círculo parece "parpadear" (quiero decir que aparece / desaparece en alta frecuencia) todo el tiempo. Dudo que el problema sea sobre el búfer, pero no estoy tan seguro. Aquí está el código que utilizo:

CÓDIGO DE PROCESAMIENTO

 // import libraries
import java.awt.Frame;
import java.awt.BorderLayout;
import processing.serial.*;

// Serial port to connect to
String serialPortName = "COM3";


/* SETTINGS END */

Serial serialPort; // Serial port object


void setup() {
  size(900,900);
  noStroke();

    serialPort = new Serial(this, serialPortName, 9600); 
}

byte[] inBuffer = new byte[50]; // holds serial message

void draw() {
      background(0);
  if (serialPort.available() > 0) {
    float[] x= new float[2];
    String myString = "";
      try {
        serialPort.readBytesUntil('\r', inBuffer);
      }
      catch (Exception e) {
      }
      myString = new String(inBuffer);
      String[] nums = split(myString, ' ');
        try {
            x[0] = float(nums[0]);    //X
            x[1] = float(nums[1]);    //Y
        }
        catch (Exception e) {
        }  
      ellipse(x[0]+500, x[1]+500, 70, 70);      //+500 to make the circle in the middle of interface
  }
  }

Comunicación serial en Arduino:

Serial.print(xf,DEC);        //méthode 1
Serial.print(" ");
Serial.print(yf,DEC);       
Serial.print('\r');

Por favor, ayúdame a encontrar la causa raíz de este problema. ¡Muchas gracias!

    

1 respuesta

1

No sé nada acerca del "procesamiento", pero basándome solo en observar el código, parece que background(0) borra el marco de los gráficos y ellipse(...) dibuja el círculo. Está haciendo lo primero incondicionalmente en cada iteración a través de draw() , pero lo último solo cuando recibe un mensaje. Así que no es sorprendente que tengas muchos parpadeos.

La solución sería mover la llamada background(0) inmediatamente antes de la llamada ellipse(...) .

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas