[Risolto] Problema text() su Processing

ciao a tutti, non riesco a risolvere un problema... ho acquistato un modulo gps, ho messo il codice ad arduino e vedo le sentenze NMEA su monitor seriale, ora però volevo vederle in una finestra in processing. Premetto che in processing il codice funziona, sul monitor seriale di processing riesco a vedere tutto, non riesco a capire dove sbaglio per la finestra. in pratica la funzione text() ti fa apparire un testo ma ad ogni aggiornamento del gps (l'ora che cambia ecc), sovrascrive sopra il testo senza far sparire quello precedente, allora devo: 1- usare fill(255,255,255) per farlo riapparire bianco come lo sfondo "background(255, 255, 255) 2- usare fill(100,100,100) per far riapparire il testo "aggiornato"

da quanto ne so non esiste un comando per cancellare il testo..

Ecco il codice. (La parte che interessa è quella in fondo "tempo:") Le ho provate tutte ma o te lo scrive lo stesso sopra, oppure si sbiadisce..

Ringranzio in anticipo chi mi potrà aiutare!

import processing.serial.*;

int linefeed = 10;       // linefeed in ASCII
int carriageReturn = 13; // carriage return in ASCII
Serial myPort;           // La mia porta seriale
int sensorValue = 0;     // valore del sensore (non serve)

int time = 0;            // il tempo in UTC
String validity;         // la validità del segnale
float latitude = 0.0;    // la latitudine in gradi
String northSouth;       // nord o sud
float longitude = 0.0;   // la longitudine in gradi
String eastWest;         // est o ovest
float speed = 0.0;       // velocità in nodi
float truecorse = 0.0;   // true corse?
int date = 0;            // la data
float magnetic = 0.0;    // variazione magnetica
String ewmag;            // est ovest della var magnetica
String mode;             // modalità gps
String checksum;         // checksum gps
PFont font;              // definizione font





void setup() {
  size (800, 600);
  background(255, 255, 255);
  //rect(200, 200, 200, 200);
  font = createFont("Arial", 16, true);
  //fill(100);
  println(Serial.list());
  myPort = new Serial(this, Serial.list()[0], 9600);      //apro la porta seriale
  myPort.bufferUntil(carriageReturn);                     // leggo bytes in un buffer finchè non prendo una linefeed (CarriageReturn)
}

void draw() {
  // NIENTE
}

/*
  serialEvent  method is run automatically by the Processing applet
 whenever the buffer reaches the  byte value set in the bufferUntil() 
 method in the setup():
 */

void serialEvent(Serial myPort) { 
  // read the serial buffer:
  String myString = myPort.readStringUntil(linefeed);
  // if you got any bytes other than the linefeed:
  if (myString != null) {
    // parse the string:
    parseString(myString);
  }
} 

/*
 parseString prende ogni stringa e cerca l'header $GPRMC.
 quando lo trova, divide le stringhe in componenti alle comma "," e le salva in variabili appropriate.
 */

void parseString(String serialString) {            // divide le stringhe alle comma
  String items[] = (split(serialString, ',')); 
  // e converte ogni sezione in int o float
  if (items[0].equals("$GPRMC") == true) {        // se il nostro primo oggetto nella sentenza è l'header GPRMC, legge tutto il resto
    time = int(items[1]);                          // infine, muove gli oggetti delle singole stringhe in variabili
    validity = items[2];
    longitude = float(items[3]);
    northSouth = items[4];
    latitude = float(items[5]);
    eastWest = items[6];
    speed = float(items[7]);
    truecorse = float(items[8]);
    date = int(items[9]);
    // nd>>>    magnetic = float(items[10]);
    // nd>>>   ewmag = items[11];
    mode = items[12];

    println("UTC Time: "+time);
    println("Validity: "+validity);
    println("Longitude: "+longitude + northSouth);
    println("Latitude: "+latitude + eastWest);
    println("Speed: "+speed);
    println("True corse: "+truecorse);
    println("Date: "+date); 
    //   non disponibile sul mio modulo gps ---> println("Magnetic Variation: "+magnetic + ewmag);
    println("Mode Indicator: "+mode);

tempo:
    while (boolean(time++)) {
      fill(255, 255, 255);
      fill(100, 100, 100);
      text("UTC TIME: "+time, 10, 100);
      break tempo;
    }
  }
}

sto imparando, background lo metto sempre nel void draw , nel setup lo fa solo una volta, quindi non ti cancella il text precedente... prova così

Ho risolto, per chi non lo sapesse, lo scrivo qua:

Dato che su processing, il testo te lo scrive una volta sola e poi se c’è qualcosa che scatta, lo scrive di nuovo (sopra).
Ho risolto cosi:

    if (time != 999999) {
      fill(255);
      rect(0, 0, 200, 50);
      fill(100);
      text("Time in UTC: "+time, 30, 25);
    }

Praticamente nel mio caso il tempo del mio GPS non è mai 999999, quindi “la molla che fa scattare tutto” è questa.
Si cancella il testo precedente creando un rettangolo colorato come lo sfondo (in questo caso bianco), e si riscrive il testo di nero.

E io che mi sono sbattuto la testa per ore…