Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2011-12-31 21:56:20 communiquer arduino et processing dans les deux sens simultanement

lafwan
membre
Date d'inscription: 2011-12-31
Messages: 21

communiquer arduino et processing dans les deux sens simultanement



bonjour tout le monde,

je suis nouveau sur ce site, je vous souhaite d'abord une joyeuse année 2012

en fait, je fais varier à, partir de processing, une led branché sur ma carte arduino avec le code suivant:

sur ARDUINO
----------------
const int ledPin = 9;      // the pin that the LED is attached to
void setup()
{
  // initialize the serial communication:
  Serial.begin(9600);
  // initialize the ledPin as an output:
  pinMode(ledPin, OUTPUT);
}

void loop() {
  byte brightness;

  // check if data has been sent from the computer:
  if (Serial.available()) {
    // read the most recent byte (which will be from 0 to 255):
    brightness = Serial.read();
    // set the brightness of the LED:
    analogWrite(ledPin, brightness);
  }
}
////////////////////

sur processing:

import processing.serial.*;
Serial port;

void setup() {
size(256, 200);


println("Available serial ports:");
println(Serial.list());
port = new Serial(this, Serial.list()[0], 9600); 

}

void draw() {
for (int i = 0; i < 256; i++) {
stroke(i);
line(i, 0, i, 300);

}
port.write(mouseX);
}
/////////////////////////////////////////////

jusque là tout fonctionne.

en parallèle, je simule sur une autre fenêtre de processing l'éclairage de  deux capteurs de lumières LDR avec deux ellipses qui modifient leurs rayons en fonction de la lumière captée par ces LDR.

le code sur arduino est:
const int analogPin = A0;// le capteur LDR branché sur l'entrée analogique 3 .
const int analogPinnn = A3;
int value = 0; // Variable de stockage de la valeur mesurée.
int valueee = 0;

void setup()
{
Serial.begin(115200);             // Setup serial. Transfert des données à 9600 bauds.
}

void loop()
{
  value = analogRead(analogPin);  // lis la mesure de l'input pin.
  valueee = analogRead(analogPinnn);
 
  Serial.print(value);         
  Serial.print(",");
  Serial.println(valueee); 
 
  delay(10);                     
}

//////////////////////////////////

et sur processing le code est :
import processing.serial.*; 

Serial myPort;               
int baudrate = 115200;         
String buffer = "";         
                             
int value;

int valueee;
//////////////////////////////////////////////////////////////////////////////////////////
void setup()
{
  size(800, 600);
  println(Serial.list());
 
String portName = Serial.list()[0];
  myPort = new Serial(this, portName, baudrate);
  myPort.bufferUntil('\n');

}
//////////////////////////////////////////////////////////////////////////////////////////
void draw()
{
  background(0);
 
stroke(204, 102, 0);
noFill();
strokeWeight(10);
rect(15,10, 769, 400);
line(400,55,400,405);
PFont fontA = loadFont("Arial-Black-255.vlw");
textFont(fontA,14);
int x = 170;
fill(255,0,58);
text("SALLE N° 1", x, 400);
text("SALLE N° 2", 580, 400);
text("ECLAIRAGE DES SALLES", 325,550);
}
//////////////////////////////////////////////////////////////
  void serialEvent(Serial myPort) {
String inString = myPort.readStringUntil('\n');
if (inString != null) {
inString = trim(inString);
float[] rayon = float(split(inString, ","));
  if (rayon.length >=2) {
 
fill(255,215,0);
strokeWeight(5);
    ellipse(200,200, rayon[0]/2, rayon[0]/2);
    ellipse(600,200, rayon[1]/2,  rayon[1]/2);
  }
}
}
/////////////////////

voila, les deux programmes fonctionnent parfaitement séparément.

mon objectif est de mettre les deux programmes arduino en un seul et aussi les deux programmes processing en un seul programme.
sur arduino, j'arrive à les mettre en un seul mais sur processing je reçois beaucoup d'erreurs.
le code sur processing des deux progarammes combinés est:

import processing.serial.*; 

Serial myPort;               
int baudrate = 9600;         
String buffer = "";                                       
int value;
int valueee;

void setup(){
  {
println("Available serial ports:");
println(Serial.list());
port = new Serial(this, Serial.list()[0], 9600); 

}
{
  size(800, 700);
  println(Serial.list());
 
String portName = Serial.list()[0];
  myPort = new Serial(this, portName, baudrate);
  myPort.bufferUntil('\n');

}
}
//////////////////////////////////////////////////////////////////////////////////////////
void draw(){
  serialEvent(Serial myPort);
  {
for (int i = 0; i < 256; i++) {
stroke(i);
line(i, 550, i, 650);

}
port.write(mouseX);
}

{
  background(0);
 
stroke(204, 102, 0);
noFill();
strokeWeight(10);
rect(15,10, 769, 400);
line(400,55,400,405);
PFont fontA = loadFont("Arial-Black-255.vlw");
textFont(fontA,14);
int x = 170;
fill(255,0,58);
text("SALLE N° 1", x, 400);
text("SALLE N° 2", 580, 400);
text("ECLAIRAGE DES SALLES", 325,450);
}
//////////////////////////////////////////////////////////////
  void serialEvent(Serial myPort) {
String inString = myPort.readStringUntil('\n');
if (inString != null) {
inString = trim(inString);
float[] rayon = float(split(inString, ","));
  if (rayon.length >=2) {
 
fill(255,215,0);
strokeWeight(5);
    ellipse(200,200, rayon[0]/2, rayon[0]/2);
    ellipse(600,200, rayon[1]/2,  rayon[1]/2);
  }
}
}
}
///////////////


je m’excuse d'avoir mis beaucoup de texte
est ce que quelqu'un peut me débloquer !!
je vous remercie énormement d'avance

Hors ligne

 

#2 2012-01-01 13:08:00 Re : communiquer arduino et processing dans les deux sens simultanement

matheynen
membre
Date d'inscription: 2008-06-09
Messages: 226

Re: communiquer arduino et processing dans les deux sens simultanement



En jetant un bref regard, il y déjà beaucoup trop de parenthèse, essaye déjà de n'avoir que les nécessaires :
une pour commencer et une pour terminer les fonctions setup() et draw(), tu y verras déjà plus clair.

Bonne année sinon smile


Ce que vous avez fait au plus petit de mes frères, c'est à moi que vous l'avez fait.

Hors ligne

 

#3 2012-01-01 14:29:29 Re : communiquer arduino et processing dans les deux sens simultanement

rep
modérateur
Lieu: Toulouse
Date d'inscription: 2008-02-27
Messages: 1444
Site web

Re: communiquer arduino et processing dans les deux sens simultanement



Lafwan quand tu postes du code utilises les balises [ code][/ code] ce sera beaucoup plus lisible.

Hors ligne

 

#4 2012-01-01 14:42:26 Re : communiquer arduino et processing dans les deux sens simultanement

lafwan
membre
Date d'inscription: 2011-12-31
Messages: 21

Re: communiquer arduino et processing dans les deux sens simultanement



merci pour vos réponses et remarques,
je vais essayer de minimiser les () matthieu ce soir, je vous tiens au courant dés que c'est fait
bon début d'année smile

Hors ligne

 

#5 2012-01-01 14:48:13 Re : communiquer arduino et processing dans les deux sens simultanement

matheynen
membre
Date d'inscription: 2008-06-09
Messages: 226

Re: communiquer arduino et processing dans les deux sens simultanement



Je voulais dire les {} wink


Ce que vous avez fait au plus petit de mes frères, c'est à moi que vous l'avez fait.

Hors ligne

 

#6 2012-01-02 13:41:24 Re : communiquer arduino et processing dans les deux sens simultanement

oyster_twiter
membre
Lieu: saint-herblain
Date d'inscription: 2008-04-01
Messages: 444
Site web

Re: communiquer arduino et processing dans les deux sens simultanement



Salut,

@lafwan :
lorsque ton code présente une forme comme celle ci :

  void serialEvent(Serial myPort) {
String inString = myPort.readStringUntil('\n');
if (inString != null) {
inString = trim(inString);
float[] rayon = float(split(inString, ","));
  if (rayon.length >=2) {
 
fill(255,215,0);
strokeWeight(5);
    ellipse(200,200, rayon[0]/2, rayon[0]/2);
    ellipse(600,200, rayon[1]/2,  rayon[1]/2);
  }
}
}

ou l'on voit les dernières accolades les unes aux dessus des autres cela signifie comme le précise matthieu qu'il y a du surplus.
Si tu fait une CTRL+T pour ranger ton code tu verras apparaître les erreurs de ce type assez clairement.
Si ton code est correctes tu devrais avoir les accolades plutôt sous cette forme là :

    }
  }
}

En positionnant le curseur sur l'accolade fermante, processing t'aide à trouver celle qui est censée s'ouvrir de l'autre côté en la surlignant. Ça peut t'aider à voir ou sont tes erreurs.

Dernière modification par oyster_twiter (2012-01-02 13:43:05)

Hors ligne

 

#7 2012-01-02 17:32:04 Re : communiquer arduino et processing dans les deux sens simultanement

lafwan
membre
Date d'inscription: 2011-12-31
Messages: 21

Re: communiquer arduino et processing dans les deux sens simultanement



merci oyster_twiter pour le CTRL+T je ne la connaissais pas
apres avoir fait le CTRL + T et verifier les accolades, il y'en ai aucune de plus sad
et pour les minimiser, je ne vois pas mettre quoi dans quoi...
et quand je compile, l'erreur que j'ai est : ( syntax error, maybe a missing right parenthesis?)
en me selectionnant en jaune la ligne de code juste aprés le void draw().

Hors ligne

 

#8 2012-01-02 19:07:00 Re : communiquer arduino et processing dans les deux sens simultanement

oyster_twiter
membre
Lieu: saint-herblain
Date d'inscription: 2008-04-01
Messages: 444
Site web

Re: communiquer arduino et processing dans les deux sens simultanement



@lafwan

Je viens de regarder un peu plus en détail ton code.
Pourquoi tu mélanges les 2 fonctions draw() et serialEvent() ?
Tu peux trouver ici de quoi t'informer sur l'art et la manière d'utiliser la fonction serialEvent() :
http://processing.org/reference/librari … index.html

Hors ligne

 

#9 2012-01-02 23:31:00 Re : communiquer arduino et processing dans les deux sens simultanement

lafwan
membre
Date d'inscription: 2011-12-31
Messages: 21

Re: communiquer arduino et processing dans les deux sens simultanement



oui  vous avez raison, je devais pas mélanger les 2 fonctions  draw() et serialEvent().
j'ai corrigé cela, et cette fois ci le message d'erreur que j'ai est : " Error inside serial.<init>() "
mon code devient:

Hors ligne

 

#10 2012-01-03 11:43:24 Re : communiquer arduino et processing dans les deux sens simultanement

cdriko
modérateur
Lieu: Le Landreau
Date d'inscription: 2010-07-16
Messages: 76
Site web

Re: communiquer arduino et processing dans les deux sens simultanement



Salut lafwan et bonne année à toi aussi

dans ton setup, il y a encore trop d'accolades.
en général, une accolade ne s'ouvre que juste après une fonction(qui elle est pourvue de parenthèses).
exemple :
void draw(){...
if(a>b){....


ton autre erreur vient du fait que tu initialise deux objets "Serial", alors qu'un seul suffit.

ton draw mérite aussi un peu de nettoyage :

Hors ligne

 

#11 2012-01-03 19:45:18 Re : communiquer arduino et processing dans les deux sens simultanement

lafwan
membre
Date d'inscription: 2011-12-31
Messages: 21

Re: communiquer arduino et processing dans les deux sens simultanement



!!!!!!!!!!!!!!!  yesssssssss ça marche, quel bonheur !!!!!!!!!!!!!!
un grand merci à tout ceux qui ont participé
je vous remercie énormément de m'avoir aider, j'ai appris  beaucoup de choses et surtout j'ai compris mes erreurs sur ce forum.
ça fonctionne trés bien, je vais essayer d'adapter mon programme en ajoutant  une 2éme led pour que chacune des led (dont je varie la tension d'allumage par processing) agisse sur un des LDR séparement.

encore une fois un grand merci
ma 2012 commence bien smilesmile

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024