Go Down

Topic: Arduino Uno envoyer les données de 2 capteurs en série (Read 963 times) previous topic - next topic

Taahl

Bonjour,

Je suis tout nouveau dans l'univers Arduino et j'ai une question à propos des communication série.

Mon objectif est de récupérer les valeurs de deux capteurs (un piezzo et un potentiomètre) dans Processing afin d'amener de l'interactivité dans mon sketch.

Après avoir lu pas mal de doc sur le net, je suis bloqué au niveau de la différenciation de toutes mes valeurs de capteurs dans mes communications série.

Voici mon code Arduino :

Code: [Select]


const int piezo = A2;
const int potard = A3;

void setup() {
    Serial.begin(9600);
}

void loop() {
       int potardReading = analogRead(potard)/4;
       int piezoReading = analogRead(piezo);
       Serial.write(potardReading);
       delay(100);
       Serial.write(piezoReading);
       delay(100);
}



Mon objectif est de récupérer ces deux valeurs de manière distincte dans Processing mais je n'y arrive pas (j'ai essayé tout un tas de bouts de code mais je n'arrive pas à obtenir le résultat souhaité !)

Merci de votre aide et bonne journée,
Thomas.

MiGaNuTs

#1
Feb 20, 2012, 03:47 pm Last Edit: Feb 20, 2012, 03:57 pm by MiGaNuTs Reason: 1
Bonjour,

je te conseille d'envoyer coté arduino un "marqueur" avec chaque valeur, de façon a pouvoir les différencier plus facilement coté processing.

par exemple tu fait un Serial.write("A"); Serial.write(potardReading); suivi d'un Serial.write("B");Serial.write(piezoReading);

Et ensuite coté processing tu identifie ton A et ton B pour savoir qui fait quoi, et tu isole la valeur qui va avec.

fdufnews

Peut être que si tu envoyais un caractère d'entête (voir 2 pour plus de sureté) pour indiquer le début du message se serait plus simple. Tu pourrais ainsi différencier les 2 données .

edit: je crois que j'ai été doublé par MiGaNuTs

Taahl

Merci pour vos réponses !

Concernant les marqueurs j'ai déjà essayé avec un Serial.write(",") entre mes valeurs numériques, je viens d'essayer aussi avec A et B, seul problème, dans processing il me converti ces caractères en des nombres entiers... je n'ai donc pas de chaîne correctement identifiable et hashable dans Processing...

Je suis donc encore bloqué :/

MiGaNuTs

@fdufnews : en effet je t'ai grillé, mais a aller trop vite j'avais ecrit un "bug" ;=)

@Taahl : montre nous ton bout de code processing qui patine.
A mon avis la clef du probleme est coté PC, pas coté arduino.

Taahl

Yep et j'ai un Mac (je pense pas que ça aie une importance mais dans le doute je précise... !)

Le bout de code Processing est vraiment tout bidon pour l'instant ;)

Code: [Select]


import processing.serial.*;
Serial port;

int value;

void setup () {
 
   println(Serial.list());
  port = new Serial(this, Serial.list()[0], 9600);
 
}

void draw() { 
 
    if (0 < port.available()) {
    value = port.read();
    }
   
    println(value);
    delay(500);
   
}


MiGaNuTs

Oula, en effet c'est vachement raccourci comme programme :D


deja lire tes trames série dans le draw() ça ne me semble pas la meilleure façon de procéder, surtout que tu peut avoir une fonction toute faite qui se lance automagiquement quand tu reçoit des données.

Ensuite a aucun moment tu découpe le message que l'arduino t'as envoyé, donc forcement pour séparer tes valeurs ça va pas le faire.


Sur www.mon-club-elec.fr ( en plus c'est un site fait par un des membres de ce forum) y'a des exemples de codes en processing, notamment un oscilloscope multi courbes.
Je te conseille de t'en inspirer. (je suis moi même en train de faire des trucs sur cette base. (mais en plus des bugs du software, j'ai aussi mon hardware qui n'en fait qu'a sa tete :D ))


Go Up