Aller au contenu


Photo
- - - - -

Processing Récuperer plusieurs valeurs d'une arduino


  • Veuillez vous connecter pour répondre
8 réponses à ce sujet

#1 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 12 décembre 2012 - 10:11

Bonjour à tous,

Voila j'avance de plus en plus sur mon robot avec processing mais je me heurte à un petit problème. J'essayse de recuperer plusieurs variable (valeur) que mon arduino envoie mais j'ai une erreur dès la deuxieme valeur recuperer.


Coté Processing
import processing.serial.*;
Serial myPort;



int temperature;
int Ultrason1;



void setup() {


size(640, 360);
String portName = Serial.list()[1];
println(Serial.list());

myPort = new Serial(this, portName, 9600);
textFont(createFont("Arial",10));

}
void draw(){
background(0, 0, 0);


text("Capteur distance 1 : "+Ultrason1, 10, 330);
text("Capteur distance 2 : ", 10, 340);
text("Capteur distance 3 : ", 10, 350);
text("Température : "+temperature, 150, 330);
}

void serialEvent(Serial port) {

   String input = myPort.readStringUntil('*'); 
      if (input != null) {
          println( "Receiving:" + input);
          input = trim(input);
          int[] vals = int(splitTokens(input, "*"));
           
          Ultrason1 = vals[0];
          temperature = vals[1];
      }
}



Coté arduino

int Ultrason1;
int temperature;

void setup() {
  Serial.begin(9600);
 
 Ultrason1=10;
 temperature=120; 
}


void loop() 
{
Serial.print(Ultrason1);
Serial.print("*");   
Serial.print(temperature);
Serial.print("*"); 

}


coté processing dès que je commente le temperature = vals[1]; cela fonctionne sans problème.

Avez vous une idée ?


error, disabling serialEvent() for //./COM8
java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	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: 1
	at Kbot.serialEvent(Kbot.java:58)
	... 8 more



Cordialement,
bypbop

#2 Ayzter69

Ayzter69

    Membre

  • Membres
  • 24 messages

Posté 13 décembre 2012 - 01:20

Salut,

Voici quelques pistes de réfléxion à prendre avec des pincettes vu que je suis clairement néophyte en la matière.

1- tu déclares un objet myPort de type Serial or dans ta fonction serialEvent tu mets comme argument un objet port de type Serial.

2- Tes fonctions n'ont pas d'arguments et utilises des variables qui ne sont pas initilisées au sein de ces fonctions, de plus la fonction où tes variables sont initialisées est de type void.
Du coup je me demande si les fonctions concernées fonctionnent.
Ex.: la fonction draw();

3- J'ai un doute concernant l'utilisation de la méthode .list;
lorsque tu fais Serial.list()[1];

4- Je me demande pourquoi ta variable Ultrason1 de type int est colorées et pas ta variable temperature;

voilà tout en espérant t'aider et n'avoir pas dit trop de bêtises.

Ayzter69

#3 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 13 décembre 2012 - 01:38

Merci,

En fait en faisant un
println(vals.length);
j'obtiens 1 au lieu de 2.

dc c'est normal que ca bug mais je ne sais pas pourquoi.

Sinon pour le reste cela fonctionne correctement

dans ma console : jaffiche ce que je recois

Receiving:50*
1
Receiving:10*
1
Receiving:50*
1


le 1 correspond à println(vals.length);


Cordialement,
bypbop

#4 Ayzter69

Ayzter69

    Membre

  • Membres
  • 24 messages

Posté 13 décembre 2012 - 01:44

Tu as combien de valeurs dans ton tableau ?

#5 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 13 décembre 2012 - 01:58

bah normalement je devrais en avoir 2 mais qd j'affiche ca taille ca donne 1 donc je pense qu'il doit y a avoir un problème ds le split ...

Cordialement,
bypbop

#6 Ayzter69

Ayzter69

    Membre

  • Membres
  • 24 messages

Posté 13 décembre 2012 - 02:04

D'accord, et t'es sur de l'argument passé à la fonction serialEvent() ?
Car dans la liste des erreurs que tu as, il y a :

error, disabling serialEvent() for //./COM8
at processing.serial.Serial.serialEvent(Unknown Source)


#7 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 13 décembre 2012 - 02:06

j'ai trouvé en fait j'ai le séparateur et le caratère de fin de lecture :dash2:

void serialEvent(Serial port) {
  

 String input = myPort.readStringUntil('\n'); 
      if (input != null) {
          println( "Receiving:" + input);
          input = trim(input);
          int[] vals= int(splitTokens(input,","));
          println(vals.length); 
          Ultrason1 = vals[0];
          println(vals[0]);
          temperature = vals[1];
      }
 }
  


ca donne ca en fait.

Cordialement,
bypbop

#8 Ayzter69

Ayzter69

    Membre

  • Membres
  • 24 messages

Posté 13 décembre 2012 - 02:17

Lol j'étais à côté de la plaque, content que tu ai pu trouver ton erreur.


@ bientôt

#9 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 13 décembre 2012 - 02:18

Aprés mon code est peu etre pas parfait je débute mais l'erreur principale c'etait ca ;-)

Encore merci
bypbop




0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users