Problema comunicazione arduino To processing

Salve, avrei un piccolo problema, ho provato già a cercare sia sul forum che su google, e infatti quello che ho scritto fin ora è una scopiazzatura :) ....comunque su arduino ho scritto

//dichiaro le variabili
int val = 1;

//dichiaro quale HW di arduino attivare
void setup() {
  Serial.begin(9600); //attiva la porta seriale (USB) con un baud rate di 9600
}

 void loop(){
   Serial.println(val); // scive sul monitor
   Serial.write( val ); // scrive sulla seriale
   val = val + 1;
   delay(2000);
   }

mentre su processing :

import processing.serial.*;
Serial myPort;  
int val;      
void setup() 
{
// size(200, 200); //crea una finestra di 200x200 pixel
//background(255); // sceglie il bianco come colore di sfondo per la finestra
  String portName = Serial.list()[0];
  myPort = new Serial(this, "COM3", 9600);
}

void draw()
{
  if ( myPort.available() > 0) {  
    val = myPort.read();       
  }
switch(val) {
  case '3': 
 // println("faccio partire il full_adder");
     open("C:\\Users\\pippo\\Desktop\\processing\\file.txt"); 
     
    break;
    
   } 
 }

il mio problema è che processing apre il mio file .txt una prima volta (quando il case state legge il numero 3 dalla seriale), ma dopo qualche secondo ne apre un'altra e così via in maniera esponenziale

NB ho usato quel metodo con arduino poiche nn so come fermare il loop() , avevo anche usato questa soluzione:

//dichiaro le variabili
bool onetime=true;
int val = 3;

//dichiaro quale HW di arduino attivare
void setup() {
  
Serial.begin(9600); //attiva la porta seriale (USB) con un baud rate di 9600
}

 void loop(){
   if (onetime){
   Serial.println("on"); // scive sul monitor
   Serial.write( val ); // scrive sulla seriale

   onetime = false;
   }
 }

(soluzione trovata su internet) ma mi apre un miriade di volte lo stesso documento. Sicuramente è una cavolata ma sono un novellino, oggi per la prima volta ho usato arduino e processing,