Bonjour à tous et à toute,
ayant pour projet de crée une station qui me donnerai tout un tas d'information sur mes aquarium (température,ph et j'en passe....) je suis au départ c'est a dire à la sonde de température. je vous explique mon problème :
- 1 - j'ai bien fait mes branchement de ma sonde sur ce point la aucun problème.
- 2 - coter arduino y a pas de problème je reçois bien les données dans le "moniteur serie"
- 3 - c'est la que sa coince : au niveau de processing je ne sais pas comment faire pour récupérer la valeur de plusieurs slot analogique (a0, a1, a2....). je vous met les codes ci-dessous pour que vous voyer ou j'en suis (soyer indulgent avec moi sa fait à peut prés 24 h que je suis la dessus sans relâche et je comence a fatiguer.
code arduino :
citation :
int analogPin = 1; // Patte centrale LM35 sur l'entrée analogique 1.
int value = 0; // Variable de stockage de la valeur mesurée.
float tempC;
void setup()
{
Serial.begin(9600); // Transfert des données série a 9600 bauds.
}
void loop()
{
value = analogRead(analogPin); // lecture en entrée de la pin 1.
tempC=(5.0*value*100.0)/1024; //conversion de la valeur analogique temperature
Serial.println(tempC); // Debug value.
delay(100) ;
}
code processing :
citation :
import processing.serial.*;
Serial myPort; // The serial port
void setup() {
size(600,600);
background(0);
// List all the available serial ports:
printArray(Serial.list());
// Open the port you are using at the rate you want:
myPort = new Serial(this, Serial.list()[1], 9600);
}
void draw() {
while (myPort.available() > 0) {
String inBuffer = myPort.readString();
if (inBuffer != null) {
println(inBuffer);
text(inBuffer,30,50);
color(255);
}
}
}
Hors ligne
Pour te décoincer, regarde sur l'aide d'Arduino comment ils envoient plusieurs données :
https://www.arduino.cc/en/Tutorial/SerialCallResponse
Le but set de vérifier que la communication est bien établie et ensuite on sait que le premier octet reçu correspond à la température le second au ph etc.
Bon courage.
Hors ligne
salut coter processing
Serial myPort; void setup() { myPort = new Serial(this, Serial.list()[0], 9600); myPort.bufferUntil(10); myPort.clear(); } void serialEvent(Serial myPort) { // read a byte from the serial port: while(myPort.available() > 0) { myPortString = myPort.readString(); } if(myPortString != null) { if(myPortString.substring(0,1).equals("A")) { String[] values = split(myPortString.trim(), ','); unitDot = int(values[1]); delaiDepartMorse = int(values[2]); delaiFinMorse = int(values[3]); } }
et coter arduino
void menu() { Serial.print("A"); Serial.print(","); Serial.print(unitLength); Serial.print(","); Serial.print(phraseDelaystart); Serial.print(","); Serial.print(phraseDelaystop); Serial.println(); }
voila comment transférer le Multi variable c'est un bout de code que javais développer pour un code morse
si ta des question n’hésite pas
a+
Danny
Hors ligne
Mushussu a écrit:
Pour te décoincer, regarde sur l'aide d'Arduino comment ils envoient plusieurs données :
https://www.arduino.cc/en/Tutorial/SerialCallResponse
Le but set de vérifier que la communication est bien établie et ensuite on sait que le premier octet reçu correspond à la température le second au ph etc.
Bon courage.
Merci pour ta réponse Mushussu mais j'ai vraiment du mal à extrapoler le code de ton lien qui est beaucoup plus complexe que ce que je veut faire en faite. Peut-tu s'il te plait m’apporter plus de précision ?
Et Dany , pour ce qui est du code Arduino, il manque des ligne ou je colle ce que tu ma donner dans arduino.
Merci de votre aide en tout cas ses cool.
Hors ligne
il ne manque aucune ligne c'est pour te montrer comment le faire si dans arduino tu veux tes 5 analogues alors tu aura quelque chose du genre
int numberSensor = 4; int[] sensorData = new int[numberSensor]; void loop() { for(int i = 0; i<numberSensor; i++) { sensorData[i] = analogRead(i); delay(10); } serial.print("A"); serial.print(","); serial.print(SensorData[0]); serial.print(","); serial.print(SensorData[1]; serial.print(","); serial.print(SensorData[2]); serial.print(","); serial.print(SensorData[3]); serial.print(","); serial.print(SensorData[4]); delay(10); }
voila
Hors ligne
Imidi ,
j'ai un souci sur le code que tu ma envoyer ci dessus (ligne 2) "expected unqualified-id before '[' token" :
int numberSensor = 4; int[] sensorData = new int[numberSer];// expected unqualified-id before '[' token void loop() { for(int i = 0; i<numberSensor; i++) { sensorData[i] = analogRead(i); delay(10); } serial.print("A"); serial.print(","); serial.print(SensorData[0]); serial.print(","); serial.print(SensorData[1]; serial.print(","); serial.print(SensorData[2]); serial.print(","); serial.print(SensorData[3]); serial.print(","); serial.print(SensorData[4]); delay(10); }
Hors ligne
Ca se peut je ne l'ai pas testé cetais senser te montrer comment faire pour transferer des donner de arduino vers processing
Mon erreur est que j'ai declarer un array pour processing et non pour arduino
Essais ca ca devrais corriger remplace la ligne int par
Int sensorData[numberSensor];
Dernière modification par imdidi (2016-11-14 18:34:03)
Hors ligne
Re, j'ai toujours une erreur dans le la fenêtre arduino meme en changeant cette ligne "//// 'int' does not a name type".
int numberSensor = 4; Int sensorData[numberSensor] = new int[numberSensor]; //// 'int' does not a name type void loop() { for(int i = 0; i<numberSensor; i++) { sensorData[i] = analogRead(i); delay(10); } serial.print("A"); serial.print(","); serial.print(SensorData[0]); serial.print(","); serial.print(SensorData[1]; serial.print(","); serial.print(SensorData[2]); serial.print(","); serial.print(SensorData[3]); serial.print(","); serial.print(SensorData[4]); delay(10); }
Hors ligne
Enleve le = new int[numberSensor] jessayerais le code quand jarriverai chez nous tentot mais tu a les grande ligne
Hors ligne
j'ai déjà essayer cela.
Hors ligne
Tien essais celui la
int numberSensor = 4; int sensorData[4]; void setup() { Serial.begin(9600); } void loop() { for(int i = 0; i<numberSensor; i++) { sensorData[i] = analogRead(i); delay(10); } Serial.print("A"); Serial.print(","); Serial.print(sensorData[0]); Serial.print(","); Serial.print(sensorData[1]); Serial.print(","); Serial.print(sensorData[2]); Serial.print(","); Serial.print(sensorData[3]); Serial.print(","); Serial.print(sensorData[4]); delay(10); }
Hors ligne
Merci beaucoup imdidi sa marche du coté d'arduino.
Cependant du cote de processing y a un souci, dans le code ci-dessous processing me dit qu'il ne connais pas les fontction "myPortString, unitDot, delaiDepartMorse, delaiFinMorse". De plus pourrait tu m'expliquer comment marche ce code (est ce que processing ecoute tout les port en meme temps et fait sa sauce tout seul) désolé tu doit voir que je suis débutant dans le sujet mais je suis vraiment intéresser par ta passion lol.
import processing.serial.*; Serial myPort; void setup() { myPort = new Serial(this, Serial.list()[0], 9600); myPort.bufferUntil(10); myPort.clear(); } void serialEvent(Serial myPort) { // read a byte from the serial port: while(myPort.available() > 0) { myPortString = myPort.readString(); } if(myPortString != null) { if(myPortString.substring(0,1).equals("A")) { String[] values = split(myPortString.trim(), ','); unitDot = int(values[1]); delaiDepartMorse = int(values[2]); delaiFinMorse = int(values[3]); } }
Hors ligne
cest normal que tu as cette erreur la cest un code dont tu na pas tout le programme les erreur sont des variable non declarer
import processing.serial.*; //importe la librarie pour utiliser le port serie Serial myPort; //on cree la classe myPort int[] sensorData = new int[4]; //variable tableau chiffre entier String myPortString; // variable phrase void setup() { // myPort = new Serial(this, Serial.list()[0], 9600);//on declare sur quel port le arduino est brancher ici le port 0 et sa vitesse // myPort.bufferUntil(10); // myPort.clear(); // on efface ce qui pourrait avoir sur le port serie } void draw(){ Println(sensorData[0]); } void serialEvent(Serial myPort) { //on cree une fonction qui elle est toujours en ecoute while(myPort.available() > 0) { // tant que le port contient 1 byte et + myPortString = myPort.readString(); //store ce que le port contient dans une variable string } if(myPortString != null) { //si le port nest pas egal a 0 if(myPortString.substring(0,1).equals("A")) { si la 1 ou 2ieme byte est egal a A String[] values = split(myPortString.trim(), ','); //separe les valaur sensoData[0] = int(values[1]); //store les donner de tes capteur numero 1 sensoData[1] = int(values[2]); //numero 2 sensoData[2] = int(values[3]); sensoData[3] = int(values[4]); sensoData[4] = int(values[5]); } } }
Dernière modification par imdidi (2016-11-15 04:38:53)
Hors ligne
Bonjour Imdidi,
je te remerci encore car avec tes explications je commence a mieu comprendre comment processing écoute l'arduino.
Cependant avec le code que j'ai modifier je n'ai que des valeur = à zero dans moniteur de processing :
import processing.serial.*; //importe la librarie pour utiliser le port serie Serial myPort; //on cree la classe myPort int[] sensorData = new int[4]; //variable tableau chiffre entier String myPortString; // variable phrase void setup() { myPort = new Serial(this, Serial.list()[0], 9600);//on declare sur quel port le arduino est brancher ici le port 0 et sa vitesse //myPort.bufferUntil(10); myPort.clear(); // on efface ce qui pourrait avoir sur le port serie } void draw(){ println(sensorData[0]); println(sensorData[1]); println(sensorData[2]); println(sensorData[3]); } void serialEvent(Serial myPort) { //on cree une fonction qui elle est toujours en ecoute while(myPort.available() > 0) { // tant que le port contient 1 byte et + myPortString = myPort.readString(); //store ce que le port contient dans une variable string } if(myPortString != null) { //si le port nest pas egal a 0 if(myPortString.substring(0,1).equals("A")) { // si la 1 ou 2ieme byte est egal a A String[] values = split(myPortString.trim(), ','); //separe les valaur sensorData[0] = int(values[1]); //store les donner de tes capteur numero 1 sensorData[1] = int(values[2]); //numero 2 sensorData[2] = int(values[3]); sensorData[3] = int(values[4]); sensorData[4] = int(values[5]); } } }
Hors ligne
dans ton moniteur de arduino a tu des valeurs ? si oui
alors essaye ca comme ca
coter processing
import processing.serial.*; //importe la librarie pour utiliser le port serie Serial myPort; //on cree la classe myPort int[] sensorData = new int[4]; //variable tableau chiffre entier String myPortString; // variable phrase void setup() { myPort = new Serial(this, Serial.list()[0], 9600);//on declare sur quel port le arduino est brancher ici le port 0 et sa vitesse myPort.bufferUntil(10); myPort.clear(); // on efface ce qui pourrait avoir sur le port serie } void draw(){ println(sensorData[0]); println(sensorData[1]); println(sensorData[2]); println(sensorData[3]); } void serialEvent(Serial myPort) { //on cree une fonction qui elle est toujours en ecoute while(myPort.available() > 0) { // tant que le port contient 1 byte et + myPortString = myPort.readString(); //store ce que le port contient dans une variable string } if(myPortString != null) { //si la variable myPortString nest pas egal a 0 String[] values = split(myPortString.trim(), ','); //separe les valaur sensorData[0] = int(values[1]); //store les donner de tes capteur numero 1 sensorData[1] = int(values[2]); //numero 2 sensorData[2] = int(values[3]); sensorData[3] = int(values[4]); sensorData[4] = int(values[5]); } }
et coter Arduino
int numberSensor = 4; int sensorData[4]; void setup() { Serial.begin(9600); } void loop() { for(int i = 0; i<numberSensor; i++) { sensorData[i] = analogRead(i); delay(100); } Serial.print(sensorData[0]); Serial.print(","); Serial.print(sensorData[1]); Serial.print(","); Serial.print(sensorData[2]); Serial.print(","); Serial.print(sensorData[3]); Serial.print(","); Serial.println(sensorData[4]); delay(100); }
Dernière modification par imdidi (2016-11-15 21:07:18)
Hors ligne