mi serve un aiuto

stavo cercando di fare un programma che tramite processing inviavo la posizione del mouse da 0 a 9 ad arduino e la visualizzavo tramite un display 7 segmenti ma nn riesco a farlo funzionare.

il codice di processing è

import processing.serial.*;
Serial port;
int val;

void setup() {
  size(256, 150);

  println("Available serial ports:");
  println(Serial.list());
 port = new Serial(this, Serial.list()[1], 9600);  
}

void draw() {
  for (int i = 0; i < 256; i++) {
    stroke(i);
    line(i, 0, i, 150);
  }

  // write the current X-position of the mouse to the serial port as
  // a single byte
  val=(mouseX/255)*9;
  port.write(val);
  println(port.read()); 
}

il codice di arduino è

int a=2,b=3,c=4,d=5,e=6,f=7,g=8,led=13;
int i,val;

void setup() {
  Serial.begin(9600);
  for(i=2;i<9;i++)
  {pinMode(i, OUTPUT);}
}

void loop() {
     val = Serial.read();
 
  switch(val)
 {
 case 0:
 digitalWrite(a ,HIGH);
 digitalWrite(b ,HIGH);
 digitalWrite(c ,HIGH);
 digitalWrite(d ,HIGH);
 digitalWrite(e ,HIGH);
 digitalWrite(f ,HIGH);
 digitalWrite(g ,LOW);
   break;
 case 1:
 digitalWrite(a ,LOW);
 digitalWrite(b ,HIGH);
 digitalWrite(c ,HIGH);
 digitalWrite(d ,LOW);
 digitalWrite(e ,LOW);
 digitalWrite(f ,LOW);
 digitalWrite(g ,LOW);
 break;
 case 2:
 digitalWrite(a ,HIGH);
 digitalWrite(b ,HIGH);
 digitalWrite(c ,LOW);
 digitalWrite(d ,HIGH);
 digitalWrite(e ,HIGH);
 digitalWrite(f ,LOW);
 digitalWrite(g ,HIGH);
 break;
 case 3:
 digitalWrite(a ,HIGH);
 digitalWrite(b ,HIGH);
 digitalWrite(c ,HIGH);
 digitalWrite(d ,HIGH);
 digitalWrite(e ,LOW);
 digitalWrite(f ,LOW);
 digitalWrite(g ,HIGH);
 break;
 case 4:
 digitalWrite(a ,LOW);
 digitalWrite(b ,HIGH);
 digitalWrite(c ,HIGH);
 digitalWrite(d ,LOW);
 digitalWrite(e ,LOW);
 digitalWrite(f ,HIGH);
 digitalWrite(g ,HIGH);
 break;
 case 5:
 digitalWrite(a ,HIGH);
 digitalWrite(b ,LOW);
 digitalWrite(c ,HIGH);
 digitalWrite(d ,HIGH);
 digitalWrite(e ,LOW);
 digitalWrite(f ,HIGH);
 digitalWrite(g ,HIGH);
 break;
 case 6:
 digitalWrite(a ,HIGH);
 digitalWrite(b ,LOW);
 digitalWrite(c ,HIGH);
 digitalWrite(d ,HIGH);
 digitalWrite(e ,HIGH);
 digitalWrite(f ,HIGH);
 digitalWrite(g ,HIGH);
 break;
 case 7:
 digitalWrite(a ,HIGH);
 digitalWrite(b ,HIGH);
 digitalWrite(c ,HIGH);
 digitalWrite(d ,LOW);
 digitalWrite(e ,LOW);
 digitalWrite(f ,LOW);
 digitalWrite(g ,LOW);
 break;
 case 8:
 digitalWrite(a ,HIGH);
 digitalWrite(b ,HIGH);
 digitalWrite(c ,HIGH);
 digitalWrite(d ,HIGH);
 digitalWrite(e ,HIGH);
 digitalWrite(f ,HIGH);
 digitalWrite(g ,HIGH);
 break;
 case 9:
 digitalWrite(a ,HIGH);
 digitalWrite(b ,HIGH);
 digitalWrite(c ,HIGH);
 digitalWrite(d ,HIGH);
 digitalWrite(e ,LOW);
 digitalWrite(f ,HIGH);
 digitalWrite(g ,HIGH);
 break;
 default:
 digitalWrite(a ,LOW);
 digitalWrite(b ,LOW);
 digitalWrite(c ,LOW);
 digitalWrite(d ,LOW);
 digitalWrite(e ,LOW);
 digitalWrite(f ,LOW);
 digitalWrite(g ,HIGH);
 break;
 }}

ringrazio in anticipo chiunque mi possa aiutare

processing manda ad arduino sulla seriale non un intero ma il corrispondente codice ascii. se fai un programmino stupido su arduino che stampa a video tutto quello che riceve te ne accorgerai... per risolvere hai due possibilità

1) invece di val = Serial.read(); scrivi val = Serial.read() + 48; se non sbaglio (quindi verifica) lo zero corrisponde al codice ascii 48 o 49 (non mi ricordo)

2) usi un casting (http://arduino.cc/en/Reference/IntCast) val = int(Serial.read());

verifica perchè non sono a casa per controllare! ciao

ho provato come dicevi ho anche cercato lo 0 e 48 ma comunque non va

in che senso non va? Hai fatto come ti ho detto? Cioè hai scritto un programma che stampa a video tutto quello che riceve?Cosa leggi? Posta qui che vediamo insieme...

Se non leggi nulla hai sbagliato qualcosa in processing

se sto usando la seriale con processing nn posso stampare a video tramite arduino o sbaglio?

si è vero scusa! comunque lo zero corrisponde al 49... prova cosi!

se non ne esci vivo prova questa soluzione che di sicuro risolvi... http://www.arduino.cc/playground/Interfacing/Processing

ok lavorero sulla seconda opzione

cmq lo zero e 48

ok ho risolto cosi

processing

import processing.serial.*;
Serial port;

void setup() {
  size(256, 150);

  println("Available serial ports:");
  println(Serial.list());
  port = new Serial(this, Serial.list()[1], 9600);  
}

void draw() {
   for (int i = 0; i < 256; i++) {
    stroke(i);
    line(i, 0, i, 150);
  }
   port.write(mouseX);
   println(port.read());
}

arduino

int a=2,b=3,c=4,d=5,e=6,f=7,g=8,led=13;
int i;
byte val;

void setup() {
  Serial.begin(9600);
  for(i=2;i<9;i++)
  {
    pinMode(i, OUTPUT);
  }
}

void loop() {
  if(Serial.available()){
    val = Serial.read(); 
    val=val/28.3;
    Serial.write(val);
  }

  switch(val)
  {
  case 0:
    digitalWrite(a ,HIGH);
    digitalWrite(b ,HIGH);
    digitalWrite(c ,HIGH);
    digitalWrite(d ,HIGH);
    digitalWrite(e ,HIGH);
    digitalWrite(f ,HIGH);
    digitalWrite(g ,LOW);
    break;
  case 1:
    digitalWrite(a ,LOW);
    digitalWrite(b ,HIGH);
    digitalWrite(c ,HIGH);
    digitalWrite(d ,LOW);
    digitalWrite(e ,LOW);
    digitalWrite(f ,LOW);
    digitalWrite(g ,LOW);
    break;
  case 2:
    digitalWrite(a ,HIGH);
    digitalWrite(b ,HIGH);
    digitalWrite(c ,LOW);
    digitalWrite(d ,HIGH);
    digitalWrite(e ,HIGH);
    digitalWrite(f ,LOW);
    digitalWrite(g ,HIGH);
    break;
  case 3:
    digitalWrite(a ,HIGH);
    digitalWrite(b ,HIGH);
    digitalWrite(c ,HIGH);
    digitalWrite(d ,HIGH);
    digitalWrite(e ,LOW);
    digitalWrite(f ,LOW);
    digitalWrite(g ,HIGH);
    break;
  case 4:
    digitalWrite(a ,LOW);
    digitalWrite(b ,HIGH);
    digitalWrite(c ,HIGH);
    digitalWrite(d ,LOW);
    digitalWrite(e ,LOW);
    digitalWrite(f ,HIGH);
    digitalWrite(g ,HIGH);
    break;
  case 5:
    digitalWrite(a ,HIGH);
    digitalWrite(b ,LOW);
    digitalWrite(c ,HIGH);
    digitalWrite(d ,HIGH);
    digitalWrite(e ,LOW);
    digitalWrite(f ,HIGH);
    digitalWrite(g ,HIGH);
    break;
  case 6:
    digitalWrite(a ,HIGH);
    digitalWrite(b ,LOW);
    digitalWrite(c ,HIGH);
    digitalWrite(d ,HIGH);
    digitalWrite(e ,HIGH);
    digitalWrite(f ,HIGH);
    digitalWrite(g ,HIGH);
    break;
  case 7:
    digitalWrite(a ,HIGH);
    digitalWrite(b ,HIGH);
    digitalWrite(c ,HIGH);
    digitalWrite(d ,LOW);
    digitalWrite(e ,LOW);
    digitalWrite(f ,LOW);
    digitalWrite(g ,LOW);
    break;
  case 8:
    digitalWrite(a ,HIGH);
    digitalWrite(b ,HIGH);
    digitalWrite(c ,HIGH);
    digitalWrite(d ,HIGH);
    digitalWrite(e ,HIGH);
    digitalWrite(f ,HIGH);
    digitalWrite(g ,HIGH);
    break;
  case 9:
    digitalWrite(a ,HIGH);
    digitalWrite(b ,HIGH);
    digitalWrite(c ,HIGH);
    digitalWrite(d ,HIGH);
    digitalWrite(e ,LOW);
    digitalWrite(f ,HIGH);
    digitalWrite(g ,HIGH);
    break;
  default:
    digitalWrite(a ,LOW);
    digitalWrite(b ,LOW);
    digitalWrite(c ,LOW);
    digitalWrite(d ,LOW);
    digitalWrite(e ,LOW);
    digitalWrite(f ,LOW);
    digitalWrite(g ,HIGH);
    break;
  }
}

grazie degli aiuti