Conexion cuadro electrico para actuadores a ordenador mediante USB y processing.

Hola a todos.
Quiero conectar un cuadro eléctrico, que fabrique hace tiempo, a un ordenador con arduino DUE y processing para programar y así crear un ejecutable para poder usarlo tanto en un portátil como en tablet-android, o voy a intentar hacerlo.
Voy haciendo mientras voy aprendiendo.

Programo con processing y manejo el arduino con el standarfirmata.

Lo que va ha hacer(O deseo que al final haga :cold_sweat:):
Manejar el cuadro desde el ordenador, y en el futuro desde una tablet.
Ver señales del cuadro en el ordenador.
Coger tiempos , voltajes y consumos desde el ordenador y si es posible crear gráfica para imprimir…
Futuras ampliaciones según el programa ejecutado
El control de arduino ya lo tengo casi echo, solo me falta poder manejar el cuadro desde el programa y mejorarlo mientras aprendo. El estado del cuadro esta también casi, solo que cuando esta abriendo o cerrando no me lo pone se me queda intermedia, no veo que estoy haciendo mal. El resto mientras investigo.

Os dejo lo que he escrito asta ahora:

import processing.serial.*;
import org.firmata.*;
import cc.arduino.*;

Arduino arduino;
boolean SignalOpen;
boolean SignalClose;
PFont font12, font22, font44;  
PImage logo;
void setup() {
  size(350, 280);  
  font12 = loadFont("MicrosoftYaHei-12.vlw");
  font22 = loadFont("MicrosoftYaHei-22.vlw");  
  font44 = loadFont("FranklinGothic-Demi-32.vlw");  
  logo=loadImage("logo.gif");  
  println(Arduino.list());
  arduino = new Arduino(this, Arduino.list()[0], 57000);
  for (int i = 2; i <= 7; i++)
    arduino.pinMode(i, Arduino.INPUT);
  for (int i = 8; i <= 13; i++) {
    arduino.pinMode(i, Arduino.OUTPUT);
    arduino.digitalWrite(i, Arduino.LOW);
  }
}

void draw() {
  fondo();
  estado();
  if ( arduino.digitalRead(2)==Arduino.LOW) abriendo();
  if ( arduino.digitalRead(3)==Arduino.LOW) cerrando();
}

void abriendo() {
  SignalOpen=true;
  while (arduino.digitalRead (4)==Arduino.LOW) {
    if (arduino.digitalRead(3)==Arduino.LOW) break;
    estado();
    arduino.digitalWrite(8, Arduino.HIGH);
    arduino.digitalWrite(9, Arduino.HIGH);
    delay(100);
    arduino.digitalWrite(9, Arduino.LOW);
    delay(100);
  }
  arduino.digitalWrite(8, Arduino.LOW);
  SignalOpen=false;
  delay(300);
  return;
}

void cerrando() {
  SignalClose=true;
  while (arduino.digitalRead (6)==Arduino.LOW) {
    if (arduino.digitalRead(2)==Arduino.LOW) break;
    estado();
    arduino.digitalWrite(10, Arduino.HIGH);
    arduino.digitalWrite(11, Arduino.HIGH);
    delay(100);
    arduino.digitalWrite(11, Arduino.LOW);
    delay(100);
  }
  arduino.digitalWrite(10, Arduino.LOW);
  SignalClose=false;
  delay(300);
  return;
}

void fondo() {
  background(255, 255, 255);                                          
  stroke(0, 0, 0);   
  textAlign(CENTER, CENTER);
  image(logo, 75, 0);
  fill(0, 0, 0);
  textFont(font12); 
  text("POR _________________________", 175, 250);
  textFont(font44);
  textSize(28);
  text("MANEJO DE ACTUADORES", 175, 80);
  fill(255, 0, 0);
  rect(50, 120, 100, 40);
  fill(0, 255, 0);
  rect(200, 120, 100, 40);
  fill(0, 0, 0);
  textFont(font22);
  text("ABRIR", 100, 140);
  text("CERRAR", 250, 140);
  return;
}

void estado() {
  fill(0, 0, 0);
  textFont(font22);
  textAlign(CENTER, CENTER);
  if (SignalClose) text("CERRANDO", 175, 200);
  else
    if (SignalOpen) text("ABRIENDO", 175, 200);
    else
      if (arduino.digitalRead(4)==Arduino.HIGH && arduino.digitalRead(5)==Arduino.HIGH && arduino.digitalRead(6)==Arduino.HIGH && arduino.digitalRead(7)==Arduino.HIGH) text("CONECTAR MANIOBRA", 175, 200);
      else
        if (arduino.digitalRead(4)==Arduino.LOW && arduino.digitalRead(5)==Arduino.LOW && arduino.digitalRead(6)==Arduino.LOW && arduino.digitalRead(7)==Arduino.LOW && SignalOpen==false && SignalClose==false) text("INTERMEDIA", 175, 200);
        else
          if (arduino.digitalRead(4)==Arduino.LOW && arduino.digitalRead(5)==Arduino.LOW && arduino.digitalRead(6)==Arduino.HIGH && arduino.digitalRead(7)==Arduino.HIGH)  text("ABIERTA", 175, 200);
          else
            if (arduino.digitalRead(6)==Arduino.LOW && arduino.digitalRead(7)==Arduino.LOW && arduino.digitalRead(4)==Arduino.HIGH && arduino.digitalRead(5)==Arduino.HIGH)  text("CERRADA", 175, 200);
  return;
}

Bueno, no se que mas poner aquí.
Alguna duda intentare responder, si alguien me ayuda con lo de marcar abriendo o cerrando se lo agradecere mucho, si lo consigo yo lo expondré aquí, y si me dais algún consejo también lo agradezco
Un saludo.