Loading...
Logo
Processing Forum
Hello,

I'm a new user of processing and arduino.

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:

Copy code

  1. 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 have found this but it don't solved my problem.

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)

Copy code
  1.  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
       }
     }
     }