Aide pour programme communication XBee

Bonjour,
Alors voilà, je viens vous demandé de l'aide pour mon programme pour envoyé un caractere entre deux xbee sous arduino.
Code reception:
#include <SoftwareSerial.h>
#include <XBee.h>

int val;
SoftwareSerial xbee(3,2);

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

void loop(){
int Byte;
if(Serial.available()){
int dataByte = Serial.read();
val = dataByte;
Serial.print(val,Byte);
}

}

et code emetteur:
#include <XBee.h>
#include <SoftwareSerial.h>

SoftwareSerial xbee(2,3);
char val;
void setup() {
Serial.begin(9600);
xbee.begin(9600);
}
void loop() {
if(Serial.available()){
val=Serial.read();
Serial.println(val);
xbee.print(val);
delay(150);
}

else{
Serial.write(0);
}

}

Et ?

Tes 2 XBee sont branchés sur 2 Arduino différents ? Qu'as-tu comme comportement ?

Oui, ils sont branchés sur deux arduino différentes, et le problème c'est que quand j'entre dans le moniteur série pour envoyer un caractère, ça ne marche pas, au contraire cela me fais buger tout le pc...
Merci pour ta réponse et ton aide ! :slight_smile:

Tu entres un caractère dans le terminal de ton emetteur ? Normalement, ton code devrait fonctionner.

Par contre, tu devrais avoir une infinité de 0 écris dans ton terminal car ton else va être exécuté en boucle tant que tu n'auras pas de caractères disponible sur le port serie de l'Arduino. Par ailleurs, l'include de la bibliothèque XBee ne sert à rien car tu n'utilises pas la moindre fonction de cette bibliothèque.

Concerant ton programme de reception, tu reçois les caractères sur le port serie et tu les renvoies sur le port serie également ? c'est bien le comportement que tu souhaites ? Car tu déclares un SoftwareSerial xbee que tu n'utilises pas par la suite dans ton code.

Peux-tu nous dire comment sont fait tes branchements ?

Dans mon serial monitor j'ai une infinité de 0 comme tu le dis, et oui je souhaite envoyer et recevoir mais mais je n'arrive pas a recevoir, ni envoyer... Et j'ai un module XBee que je branche directement a l'arduino, voici une photo pour plus d'informations:

désolé d'avoir répondu si tard j'étais entrain de faire des recherches dessus mais je n'ai rien trouvé...

Si tu utilises les shields XBee, tu vas avoir un conflit entre la com XBee et la com serie car tous les deux utilises les ports 0 et 1 (d'ailleurs tu as des jumpers pour choisir entre XBee et serie).

Si tu veux pouvoir utiliser la liaison serie et une liaison XBee, il ne faut pas que tu branches le shield XBee directement sur l'arduino mais que tu refasses les branchements (avec des fils) sur les ports que tu souhaites utiliser.

Et si j'essayer en condamnant les ports 0 et 1 ?

Tu veux essayer quoi en "condamnant" les ports 0 et 1 ?


Voici ce que j'ai fait, pour éviter de faire buger les arduino.

Ok, tu ne vas plus avoir de problèmes avec les arduinos mais là, tes XBee ne peuvent plus communiquer avec les arduinos !

Les ports 0 et 1 du shield correspondent aux Rx/Tx du module XBee. Il faut donc qu'ils soient reliés à l'arduino si tu veux pouvoir faire communiquer tes arduinos au moyen des XBee.

Par contre, si tu veux garder d'un coté le port serie (Rx/Tx sur ports 0 et 1) et de l'autre le port "XBee", il faut que tu branches le port 0 et 1 du shield sur 2 ports inutilisés de l'arduino (puis que tu utilises SerialSowftware pour déclarer un port serie en plus).

'lazo' étant mon partenaire pour ce projet , je me permet donc de répondre.
J'ai réussis à ressouder les broches coupées sur la photo, les modules sont fonctionnelles , il ne nous manques plus que quelques détails à régler sur nos programmes afin de faire communiquer les modules XBee :wink:
Une aide de votre part serais la bienvenue , Merci d'avance :slight_smile: !

Bonjour,

Je veux bien vous aider, mais pour cela, il faudrait me dire où vous bloquer et ce que vous voulez faire exactement.

Que souhaitez-vous pour vos 2 arduinos + XBee ?

  • 1 arduino connecté au PC (terminal) pour emettre uniquement et 1 arduino connecté au PC (terminal) pour receptionner uniquement ?
  • 2 arduinos connectés au PC (terminal) pour emettre et recevoir ?

Bonsoir, excusez moi de la réponses tardive... Oui alors en revenant au "projet", je souhaite émmettre des informations sous arduino d'un pc (terminal), et recevoir d'un pc (terminal) voilà merci de bien nous venir en aide :slight_smile:

Donc pour cela, il te faut 2 communications séries sur chacun de tes arduinos. Une pour la communication PC <=> Arduino et une pour la communication XBee 1 <=> XBee 2.

Au final tu auras :
PC (émission) <=> Arduino 1 - XBee 1 <=> XBee 2 - Arduino 2 <=> PC (réception)

Sur l'arduino 1, tu lis sur le port série branché au PC (Serial) et tu écris sur le port série du XBee (SoftwareSerial).
Sur l'arduino 2, tu lis sur le port série du XBee (SoftwareSerial) et tu écris sur le port série branché au PC (Serial).

Pour les branchements, comme tu as besoin du port USB pour connecter chaque arduino au PC, il faut que les pin 0 et 1 de tes shield XBee soient branchés sur d'autres pins que les 0 et 1 de ta carte arduino. Sinon, tu vas avoir un conflit entre la communication avec le PC et via le module XBee.

Essaie de faire tes montages comme je viens de te l'expliquer et de faire tes 2 sketchs.

Ensuite reviens nous donner les résultats on verra s'il y a encore des points de blocage.

Alors voici mon sketch pour la réception:
#include <SoftwareSerial.h>
#include <XBee.h>

int incomingByte;
int val;

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

void loop(){

int Byte;
if(Serial.available() > 0){
incomingByte = Serial.read();
int dataByte = Serial.read();
val = dataByte;
Serial.print(incomingByte);
}

}

Alors, voilà oublié le code que j'ai posté tout a l'heure, voici le nouveau sketch que j'ai fait pour allumer une led par rapport a l'émission Xbee. Pour étre plus clair, je souhaite envoyé un 1 depuis mon arduino émetteur pour allumé ma Led qui seras branché au port 13 et GND de l'arduino recepteur.

Voici le code recepteur:
#include <SoftwareSerial.h>
#include <XBee.h>

int incomingByte;
int val;

void setup(){
Serial.begin(9600);
digitalWrite(13, HIGH); // first blink
delay(50);
digitalWrite(13, LOW);
delay(200);
}

void loop(){

int Byte;
if(Serial.available() > 0){
incomingByte = Serial.read();
if(incomingByte == '0'){
digitalWrite(13, LOW);
}
else if(incomingByte == '1'){
digitalWrite(13, HIGH);
}

}
}

ps: je n'est pas encore fait le code emeteur mais ça arrive bientôt

Comprends-tu ce que fait ton sketch ?

Ton module de réception n'est-il pas sensé lire sur le port série du module XBee ? puis ecrire sur le port série vers le PC ? Si c'est bien le cas, tu devrais déclarer 2 ports séries (Serial pour le PC + 1 SoftwareSerial pour le XBee).
Ensuite, tu déclares 4 variables (incomingByte, val, Byte et dataByte) pour gérer la lecture/écriture d'un seul caractère...

Avant de coder ton sketch, tu devrais essayer d'écrire en pseudo-code ton algorithme.

Déclarer les bibliothèques nécessaires

Déclarer les variables nécessaires

Initialisation {
  Initialiser le port série PC
  Initialiser le port série XBee
}

Fonctionnement {
  Si un caractère est disponible sur le port série XBee Alors {
    Lire le caractère sur le port série XBee
 Ecrire le caractère sur le port série PC
  }
}

Bonjour, après de longue recherche et un travail, finalement je suis arrivé a un programme pour envoyer l'alphabet que je ne comprend pas vraiment. Est ce que ce programme envoi sous Xbee ? Comment je pourrais faire pour envoyé juste un "1" ou juste un "0" ? Merci de vôtre réponse et désolé pour le retard. Voici ce fameux programme d'émission :slight_smile: :

#include <SoftwareSerial.h>

SoftwareSerial xbee(2, 3); // RX, TX
char c = 'A';
int  pingPong = 1;

void setup()  {
   Serial.begin(57600);
   Serial.println( "Arduino started sending bytes via XBee" );

   // set the data rate for the SoftwareSerial port
   xbee.begin( 19200 );
}

void loop()  {

  xbee.print( "1" );
 

  Serial.println( "1" );
 

  c = c + 1;
  if ( 1>'0' )
       1 = '0';
 

  if ( pingPong == 0 )
    digitalWrite(13, LOW);
  else
    digitalWrite(13, HIGH);
  pingPong = 1 - pingPong;
  delay( 1000 );
}

Le programme fonctionne ? Tu arrives à le compiler ?

Les déclarations du début et le setup sont corrects pour que ton arduino communique avec le PC via le port serie et au travers du XBee (branché sur les pin 2 et 3).

Pour ce qui est dans la méthode loop... c'est bourré de fautes et je ne comprends pas ce que c'est sensé faire.

Il y a du clignotement de LED, de l'écriture sur le port serie et le XBee.

Avant d'essayé de coder à tous prix, as-tu prix le temps de bien définir ce que tu attends de ton programme ?

Salut, oui j'ai essayé plusieurs fois mais finalement je n'y arrive pas vraiment, oui, j'ai bien pris le temps de le faire :slight_smile: je ne baisse pas les bras et te demande un petit conseil :slight_smile: voilà merci de bien vouloir m'aider c'est sympa