Lettura da seriale

Salve a tutti; ho una domanda da ignorante; Ho scritto 4 righe in croce per arduino per -legere da un accelerometro, -mappare la lettura in 0 - 180 , -scrivere su seriale fin qui...very easy, adesso sto cominciando a masticare processing, e vorrei: leggere da seriale il valore di arduino...e ci siamo; con quel valore far ruotare un quadrato...ECCO IL PROBLEMA...

import processing.serial.*; 

Serial myPort;    // The serial port: 
PFont myFont;     // The display font: 
String inString;  // Input string from serial port: 
int lf = 10;      // ASCII linefeed 
int deg, val;

void setup() { 
  size(400,200); 

  println(Serial.list()); 
  
 myPort = new Serial(this, Serial.list()[0], 9600); 
 myPort.bufferUntil(lf); 
} 

void draw() { 
  background(0); 
  text("Lettura: " + inString, 20,50);

 float deg = mouseX;
 float val  = radians(deg);
translate(width/2, height/2);
rotate(val);
  rect(-26, -26, 52, 52);
} 
 void serialEvent(Serial p) { 
  inString = p.readString(); 
   
}

al momento con questo codice riesco a leggere dalla seriale, ma non riesco prorpio a usare la stessa variabile (inString) per girare il quadrato, (che al momento muovo con il mouse)... dove sbaglio??? si accettano parolacce, insulti e consigli..

dunque prima di tutto trasforma la stringa inString in intero; int ris = Integer.parseint(inString);

poi hai un valore da 0 a 180, quindi da trasformare in radianti: float val = radians(ris);

a questo punto hai finito :-)

In tanto grazie!! poi... sarò pirla io... ma a me non funzia; per non sbagliare ho fatto il sempre efficente "copia incolla" dentro il void setup e poi dentro void draw di "int ris = Integer.parseint(inString);" Ma il processing mi risponde: The funtion parseint(string) does not exist....uffa!!!

piccolo trucco: processing è java, quindi basta dare un occhio alle API delle classi java (in pratica è il reference di arduino ma per java): http://download.oracle.com/javase/6/docs/api/

osserviamo la classe Integer:

public static int parseInt(String s) throws NumberFormatException

Parses the string argument as a signed decimal integer. The characters in the string must all be decimal digits, except that the first character may be an ASCII minus sign '-' ('\u002D') to indicate a negative value. The resulting integer value is returned, exactly as if the argument and the radix 10 were given as arguments to the parseInt(java.lang.String, int) method.

quindi non va semplicemente perchè hai scritto parseint al posto di parseInt (la i va maiuscola, notazione a cammello :-) )

dimenticavo:

Throws: NumberFormatException - if the string does not contain a parsable integer.

quindi se nella stringa ci sono caratteri che non sono trasformabili in numero, viene lanciato l'errore "NumberFormatException" che puoi gestire senza impallare il programma con una try{ //codice che può generare l'errore }catch(NumberFormatException e){ //cosa fare se c'è stato l'errore }

Effettivamente ho fatto un altro piccolo passo, grazie ancora. Fatta la correzzione, ora dice quello che sostenevi tu "NumberFormatException: null"

cosa gli faccio fare se c'è l'errore?

Ora che ci penso,non è strano che non funzioni dato che arduino manda in seriale SOLO numeri.??..

ahahah no, arduino invia dei char, se hai usato print() o println() automaticamente fa la conversione.

Il problema che tu stai inviando NULL, ovvero l'oggetto inString non esiste (probabilmente nessuna lettura valida è ancora arrivata) O usi un if per controllare se inString non è null, oppure usi il blocco try catch. su goolge trovi tantissime guide/tutorial/esempi

If (Serial.available() > 0) {
  .......
}

Così controlli che ci sia effettivamente qualcosa sulla seriale, evitando in questo modo di cercare di lavorare su dati inesistenti.