Leggere seriale con processing

Salve a tutti. Comincio con il dire che purtroppo non conosco a menadito processing.
Poi non so se posso usare il forum per parlare di processing. Però io ci provo.
Comunque il mio problema è questo:
Ho un sensore collegato alla porta USB con un convertitore rs232 - USB, che invia continuamente dati al PC a velocità di 115200 baud rate in seriale.
Il pacchetto dati che invia, appena alimentato, è formato da una testa, il corpo del pacchetto e una coda.

Praticamente la testa invia sempre in esadecimale 0D e 0A. Poi il corpo del pacchetto è formato da 12 byte e una coda che invierà sempre 00 0FF 0FF.

Con processing leggendo la seriale ho intercettato i valori dell'intero pacchetto dati e nella parte sottostante il codice sorgente vengono visualizzati.
Però ora dovrei risolvere il fatto di far visualizzare le informazioni che mi interessano, togliendo la testa e la coda del pacchetto, in una finestra e magari fare in modo che se il valore che mi interessa, se raggiunge un centro valore fa accendere un cerchio rosso o verde.
E questo l'ho fatto. Però creando la finestra, sembra che poi il pacchetto di disallinea nella sua interezzaa.
Come potrei fare per visualizzarlo bene anche in finestra creata con size?

Se non hai arduino coinvolto, c'è un forum dedicato a Processing.

ecco un semplice codice Processing e un codice Arduino che invia un paylaod corrispondente al tuo protocollo in cui i primi tre valori sono i colori R, G e B (inviare una volta al secondo).

Il programma Processing ha una semplice macchina a stati per ricevere i dati e usa i primi 3 byte del payload per impostare il colore di sfondo della finestra

PROCESSING:

import processing.serial.*;
Serial arduinoSerial;      // The serial port
boolean updateNeeded = true;
int payload[];
final byte payloadSize = 12;
static int messageStep = 0;
static int pIndex = 0;

boolean getPayload() {
  boolean payloadComplete = false;

  if (arduinoSerial.available() != 0) {
    int b = arduinoSerial.read();
    switch(messageStep) {
    case 0: // waiting for 0x0D
      if (b == 0x0D) messageStep = 1;
      break;

    case 1: // waiting for 0x0A
      if (b == 0x0A) {
        pIndex = 0;
        messageStep = 2;
      } else
        if (b != 0x0D) messageStep = 0;
      break;

    case 2: // getting the payload
      payload[pIndex++] = b;
      if (pIndex >= payloadSize) messageStep = 3;
      break;

    case 3: // getting the tail
      if (b == 0x00) messageStep = 4;
      else {
        println("Error. expecting 0x00");
        messageStep = 0;
      }
      break;

    case 4: // getting the tail
      if (b == 0xFF) messageStep = 5;
      else {
        println("Error. expecting firt 0xFF");
        messageStep = 0;
      }
      break;

    case 5: // getting the tail
      if (b == 0xFF) {
        messageStep = 0;
        payloadComplete = true;
      } else {
        println("Error. expecting second 0xFF");
        messageStep = 0;
      }
      break;
    }
  }
  return payloadComplete;
}

void setup() {
  size(100, 100);
  printArray(Serial.list());
  arduinoSerial = new Serial(this, Serial.list()[2], 115200); // adjust to your serial port. Mine was [2]
  arduinoSerial.clear();
  payload = new int[payloadSize];
}

void draw() {
  if (getPayload()) {
    print("Payload: "); 
    for (int i = 0; i < payloadSize; i++) print(payload[i] + " ");
    println(); 
    background(payload[0], payload[1], payload[2]); // R, G, B
  }
}

Arduino

const byte head[] = {0x0D, 0x0A};
const byte tail[] = {0x00, 0xFF, 0xFF};
byte payload[] = {0, 0, 0, 51, 52, 53, 54, 55, 56, 57, 58, 59};

void setup() {
  Serial.begin(115200);
}

void loop() {
  Serial.write(head, sizeof head);
  payload[0] = random(0, 256); // R
  payload[1] = random(0, 256); // G
  payload[2] = random(0, 256); // B
  Serial.write(payload, sizeof payload);
  Serial.write(tail, sizeof tail);
  delay(1000);
}