Pages: 1
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
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
Hors ligne
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
Hors ligne
Je voulais dire les {}
Hors ligne
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
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
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
@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
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
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
!!!!!!!!!!!!!!! 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
Hors ligne
Pages: 1