Gallinero processing y Arduino

Hola, al igual que otros compañeros estoy diseñando una puerta automática para un gallinero.

Primero quiero desarrollar la interface que lo controla en Processing y luego me pondré con el Arduino.

El primer problema con el que me he encontrado con el Processing y la librería connectip5, es que el formulario desplegable en el que me aparecen los puertos disponibles, una ved desplegada no vuelbe a contraerse y a ademas la lista de puertos se queda por debajo de las otras ventanas.

Alguien me sabe decir por que es o como solucionarlo ya que en el google no he encontrado nada. Cuando he probado algunos ejemplos por separado en un archivo nuevo los formularios desplegables me funcionan bien, pero cuando uno los dos códigós no funcionan.

Gracias y un saludo.

import controlP5.*;
import processing.serial.*;
import java.util.*;

Serial puerto;

ControlP5 cp5;
int myCurrentIndex = 0;
String[] tokens;

boolean t=false;
int cont = 0;
 
DropdownList ListaPuertos; 
Textfield TxtPuerto;
Button BtnPuerto;
  
Textfield TxtContrasena1;
Textfield TxtContrasena2;
Button BtnContrasena;
 
Textfield TxtHora1;
Textfield TxtHora2;
Button BtnHora;

Textfield TxtLDR;
Toggle TogLDR;
Button BtnLDR;
Button BtnLDRLe;

Textfield TxtComando;
Button BtnComando;

Textfield TxtLog;

int myColor = color(0);
int c1,c2;


// Button Bt; // Creamos una variable para almacenar el controlador del botón 
 Button Btn;

void setup(){
  puerto = new Serial(this, Serial.list()[0], 115200);
  size(850,650); //Es el tamaño del lienzo o de la aplicación.
  
  
  cp5 = new ControlP5(this);
  
  PFont p = createFont("Verdana",14); 
  ControlFont font = new ControlFont(p);
  cp5.setFont(font);
  
  
stroke(0,0,0);//define el color de la linea, en este caso rojo
strokeWeight (1);//define el grosor de las lineas
  
// -----------------------------------------------------------------------------------------------
//PUERTO

  tokens = new String[10];
  tokens =  Serial.list();

  List l = Arrays.asList(Serial.list());
  
  //List l = Arrays.asList("a", "b", "c", "d", "e", "f", "g", "h");

//ListaPuertos = cp5.addScrollableList("dropdown")

     


 BtnPuerto = cp5.addButton("BtnPuerto")
  .setValue(10)
  .setPosition(670,10)  //69,19
  .setSize(170,40)
  .setLabel("Conectar")
  .activateBy(ControlP5.PRESS);  //RELEASE
  
 line (10,80,840,80);//linea horizontal 1  
 
 
    cp5.addScrollableList("Puertos")
     .setValue(99)
     .setPosition(10, 10)
     .setSize(550, 300)
     .setBarHeight(40)
     .setItemHeight(40)
     .addItems(l)
     .setType(ScrollableList.DROPDOWN)
     .setOpen(false) 

     // .setType(ScrollableList.LIST) // currently supported DROPDOWN and LIST
     ;

fill(0,250,0); 
 
ellipse (630,30,40,40); // draw rectangle
//background(0);
  
// -----------------------------------------------------------------------------------------------
//CONTRASEÑA

   TxtContrasena1 = cp5.addTextfield("Contraseña") 
    .setPosition(10,90) 
    .setSize(250,40);
  
 TxtContrasena1.setText("1234");   
     
   TxtContrasena2 = cp5.addTextfield("Repite la Contraseña") 
    .setPosition(270,90) 
    .setSize(250,40);
   
 TxtContrasena2.setText("1234");   
 
   
   BtnContrasena = cp5.addButton("BtnContrasena")
        .setValue(10)
        .setPosition(670,90)  //69,19
        .setSize(170,40)
        .setLabel("Actualizar")
        .activateBy(ControlP5.PRESS);  //RELEASE
        

  line (10,160,840,160);//linea horizontal 1

// -----------------------------------------------------------------------------------------------
//HORAS

   TxtHora1 = cp5.addTextfield("Hora1") 
    .setPosition(10,170) 
    .setSize(100,40);
    
   TxtHora1.setText("10:00");  
    
   TxtHora2 = cp5.addTextfield("Hora2") 
    .setPosition(270,170) 
    .setSize(100,40);
    
   TxtHora2.setText("20:00");  
   
   BtnHora = cp5.addButton("BtnHora")
        .setValue(10)
        .setPosition(670,170)  //69,19
        .setSize(170,40)
        .setLabel("Actualizar")
        .activateBy(ControlP5.PRESS);  //RELEASE       
        
  line (10,240,840,240);//linea horizontal 2line (10,370,840,370);//linea horizontal 2
// -----------------------------------------------------------------------------------------------
//LDR

   TxtLDR = cp5.addTextfield("LDR") 
    .setPosition(10,250) 
    .setSize(250,40);
    
   TxtLDR.setText("127");  
    
   TogLDR = cp5.addToggle("toggle1",false,300,250,40,40);

   BtnLDR = cp5.addButton("BtnLDR")
        .setValue(10)
        .setPosition(670,250)  //69,19
        .setSize(170,40)
        .setLabel("Actualizar")
        .activateBy(ControlP5.PRESS);  //RELEASE          

   BtnLDRLe = cp5.addButton("BtnLDRLe")
        .setValue(10)
        .setPosition(480,250)  //69,19
        .setSize(170,40)
        .setLabel("Leer LDR")
        .activateBy(ControlP5.PRESS);  //RELEASE  

   line (10,320,840,320);//linea horizontal 3 
        
// -----------------------------------------------------------------------------------------------
//COMANDO

  TxtComando = cp5.addTextfield("Comando") 
    .setPosition(10,330) 
    .setSize(650,40);   
              
  BtnComando = cp5.addButton("BtnComando")
        .setValue(0)
        .setPosition(670,330)  //69,19
        .setSize(170,40)
        .setLabel("Mandar")
        .activateBy(ControlP5.PRESS);  //RELEASE
        
  TxtLog = cp5.addTextfield("Log") 
    .setPosition(10,400) 
    .setSize(830,220);   
  
  ListarSerial (); //Busca puertos seriales
  
  
  
  

  
  
  
}





void draw() { 

//String myText = TxtComando.getText() + "\n";
 //String myText = "This is line 1  " + "\n"+"This is line 2 ";
  //TxtLog.setText(myText);

  
  if (t == true){
    ///text ("Pulsacion:"+ cont, 400, 200);
    //t = false;
    //cont++;
    //println (t+" <- Pulsado");
  }
    fill(255);
  if (myCurrentIndex >= 0) {
     text(tokens[myCurrentIndex], 200, 40); 
  }
}

public void controlEvent(ControlEvent theEvent) {
  String name = theEvent.getController().getName();
  
  //----------------------------------------
  //BtnComando 
  if (name.equals("BtnComando")) {
    if (!t) {
      t=true;
      println("BtnComando true ");
    } else {
      t=false;
      println("BtnComando false ");
      //t=false;
    }
  }//Fin BtnComando
  
  if (name.equals("Puertos")) {

    }

}

void ListarSerial (){
  String[] Puertos = Serial.list();//Metemos los puertos en un array
  
  if (Puertos.length == 0) {                                  //Si no ha encontrado puertos
    println ("No se ha encontrado ningun puerto");
    ActualizarLog ("No se ha encontrado ningun puerto");
    exit();
  }else{                                                      //Si encuentra puertos
  println("Se han encontrado los siguientes puertos: ");
  ActualizarLog ("Se han encontrado los siguientes puertos: ");
  
  for (int i = 0; i < Puertos.length; i++){                    //Recorre los puertos y los muestra
    String dato = Puertos[i]; 
    
    println (dato);//Imprime los puertos por el serial
    ActualizarLog (dato);//Imprime los puertos en el TxtLog
    
    }//Fin FOR
    
  }//Fin IF
  
}//Fin listar serial

void ActualizarLog (String texto){
  String texto1;
  
  texto1 = TxtLog.getText();
  
  TxtLog.setText(texto1 +"\n"+ texto); 
  
}


void Puertos(int n) {
  println(n);  
  myCurrentIndex = n;  
}