Processing serial communication Arduino error
in
Integration and Hardware
•
9 months ago
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:
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)
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:
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
}
}
}
1