I'm want to make a graph of the serial data my arduino is sending to the computer via processing.
I'm on Ubuntu Lucid 10.04
When I run Processing, I have this error:
Stable Library ========================================= Native lib Version = RXTX-2.1-7 Java lib Version = RXTX-2.1-7 [0] "/dev/ttyACM0" Chaine reçue=CAN=;655832;0;=finCAN CAN= Valeur CAN(0)= 655832 soit en valeur entière : 655832 Valeur CAN(1)= 0 soit en valeur entière : 0 error, disabling serialEvent() for /dev/ttyACM0 java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at processing.serial.Serial.serialEvent(Unknown Source) at gnu.io.RXTXPort.sendEvent(RXTXPort.java:732) at gnu.io.RXTXPort.eventLoop(Native Method) at gnu.io.RXTXPort$MonitorThread.run(RXTXPort.java:1575) Caused by: java.lang.ArrayIndexOutOfBoundsException: 7 at sketch_121230a.serialEvent(sketch_121230a.java:68) ... 8 more
I don't know if the problem come from arduino or processing?
What can I do?
You can see below the processng code.
Thans for your help. (sorry for my bad english, I speak french)
import processing.serial.*; Serial myPort; // Variable Port Série boolean etatPause=false; // variable témoin appui sur bouton stop int nombreVoies=2; // nombre de voies de mesure //////////////////////////////////////////////////////////////////////////////////////////// void setup () {
size(600,600); // initialise la fenetre à la taille L x h println(Serial.list()); // Liste tous les ports disponible et affiche le résultat // Le port utilisé est listé avec l'indice 0 donc j'ouvre le port Serial.list()[0]. // A adapter si votre port est différent - cf liste qui s'affiche à l'exécution myPort = new Serial(this, Serial.list()[0], 9600); // ne génère aucun évènement Série tant qu'aucun caractère saut de ligne n'est reçu myPort.bufferUntil('\n'); // initialise le fond de la fenêtre background(255);// 0 = noir - 255 = blanc } /////////////////////////////////////////////////////////////////////////////////////////// void draw () { // tout se passe dans la fonction SerialEvent car le programme reçoit des données } ///////////////////////////////////////////////////////////////////////////////////////// void serialEvent (Serial myPort) { String inString = myPort.readStringUntil('\n'); // chaine stockant la chaîne reçue sur le port Série // saut de ligne en marque de fin if ((inString != null) && (etatPause==false)) { // si la chaine recue n'est pas vide et toggle pause false inString = trim(inString); // enlève espace blancs de la chaine recue println("Chaine reçue="+inString); // debug //---- extraction des valeurs à partir de la chaine reçue ---- // la chaine reçue avec la valeur des 6 mesures est sous la forme CAN=:val0:val1:val2:val3:val4:val5:=finCAN String[] inSubstring = split(inString, ';'); // extrait println(inSubstring[0]); // debug //--- déclaration tableaux utiles int[] inByte_brut= new int[2]; // tableau pour valeur reçue en valeur numérique entiere // float[] inByte= new float[2]; // tableau pour valeur reçue en valeur numérique décimale //---- extraction des valeurs de CAN à partir de la chaine for (int i=0; i<nombreVoies; i++) { print("Valeur CAN("+i+")= "+ inSubstring[i+1]); // debug inByte_brut[i]=int(inSubstring[i+1]); // conversion valeur reçue en valeur numérique entiere print( " soit en valeur entière : " + inByte_brut[i]); // debug // inByte[i]=float(inSubstring[i+1]); // conversion valeur reçue en valeur numérique décimale // print( " soit en valeur décimale : " + inByte[i]); // debug println(""); } println(inSubstring[7]); // debug - chaine de fin de chaine if ((match(inSubstring[0],"CAN=")!=null) && (match(inSubstring[7],"=finCAN")!=null)) { // si la chaine reçue est valide println("La chaine CAN reçue est valide ! "); // debug } } }