Port série reçevoir et envoyer

Bonsoir à tous,

J'ai une Arduino Bluetooth et une Arduino UNO et je voudrais savoir si je peux avec mon port série d'ordinateur faire communiquer les deux.
Je m'explique, je voudrais que l'arduino UNO (connecté au PC via) puisse envoyer des données au PC qui lui les enverraient à l'Arduino Bluetooth. Est-ce que l'Arduino UNO et l'Arduino Bluetooth seront connecté au même port série ? Ou alors faudra-t-il que les données reçu dans le port série (COM2 par exemple) soit envoyé via un autre port (COM3 par exemple) ?

Merci d'avance :slight_smile:

J'ai jamais essayé avec plusieurs Arduino, mais c'est peut-être possible avec Processing :

Eventuellement comme ça :

myPort1 = new Serial(this, Serial.list()[1], 9600);
 myPort2 = new Serial(this, Serial.list()[2], 9600);

Euh... c'est quoi Processing ?

Sinon ce que je voudrais faire en fait c'est récupérer les valeurs d'un ou plusieurs potentiomètre envoyées au PC avec l'Arduino UNO puis renvoyer ces valeurs à l'aide du PC à un Arduino Bluetooth pour diriger des servos.

Voilà, je te remercie de ta réponse en tout cas ! (j'essaye de me renseigner sur Processing actuellement)

Processing est un compilateur dont l'IDE est la même que celle de l'environnement Arduino, tu codes presque de la même façon, ça compile en Java donc portable sur les principales plateforme.

Ok merci :wink:

Donc tu penses que c'est possible de recevoir des données dans un port série (COM1) pour les envoyer via un autre port série (COM2) et tout cela sur PC ?

je me suis souvent posé cette question, mais je n'ai jamais eu de projet pour le quel j'ai du faire cet essais... mais je pense que ça doit être faisable.

Ok, merci bien ! :wink:

J'essayerais de le faire dans les jours à venir et je reviendrais poster pour vous dire comment ça se passe :slight_smile:

Bon... en gros ça fonctionne, j'ai fais un essai avec les bouts de code ci-dessous.
Le premier Arduino envoi "A", Processing lit sur le port série s'il reçoit "A", il envoie la valeur lue, le deuxième Arduino lit le port série et lorsqu'il reçoit quelque chose l'envoi sur le sérial-monitor sur ce dernier s'affiche un.... A :smiley:

L'Arduino qui envoie :

void setup() {
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
}

void loop() {

delay(1000);
Serial.print ("A");
}

L'arduino qui reçoit :

void setup() {
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
}

void loop() {

// send data only when you receive data:
if (Serial.available() > 0) {

Serial.print("I received: ");
Serial.println(char(Serial.read()));
}
}

Entre les deux Arduinos, Processing :

char val=' ';
import processing.serial.*;

Serial myPort1;
Serial myPort2;

void setup() {

println(Serial.list());

myPort1 = new Serial(this, Serial.list()[4], 9600);
myPort2 = new Serial(this, Serial.list()[2], 9600);
}
void draw() {
val= myPort1.readChar();
if (val =='A') {
myPort2.write(val);
val=' ';
myPort2.clear();
}
}

Je confirme, on peut ouvrir autant de port COM sur un PC qu'on en a.

Bonsoir à tous,

Merci à toi Jean-François, ton code me sera d'une grande aide =)
Je voudrais tout de même savoir quelques trucs :

  • "char val=' ';" pour avoir mis cela ? (c'est plus les ' ' que je ne comprends pas)
  • "myPort1 = new Serial(this, Serial.list()[4], 9600);" que signifie le "this, Serial.list()[4]" ?

Merci bien !

Ps : super forum d'entre aide :slight_smile:

C'est pour que val soit initialisé avec.... rien (on est au moins sur de ne pas avoir une valeur aléatoire).

Pour ton autre question, c'est pour initialiser myPort (ou le nom que tu donnes) sur la position 4 des port listés et ça l'initialise à 9600 Bauds, tu peux changer cette valeur, mais il faut que ce soit la même chose coté Processing et coté Arduino.