Go Down

Topic: Xbee communication (Read 993 times) previous topic - next topic

Striker

Bonjour à tous,

j'ai un problème avec mes xbee's, je m'explique:

Sur le module 1, j'ai 2 boutons, chaque bouton correspond à une lettre qui sera envoyé
Sur le module 2,j'ai 2 leds
Si j'appuie sur le bouton 1, 'a' est envoyé, la Led s'allume génial
Si j'appuie sur le bouton 2, 'b' est envoyé, le Led ne s'allume pas....
Il faut que j'appuie sur les 2 boutons en meme temps pour que sa s'allume en clignotement .....


Quelqu'un aurait une idée de comment je pourrais régler ce problème ???

Merci d'avance

barbudor

Peut être commencer par donner plus de détails, câblage et configuration des XBee ?
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Striker

Module 1
Code: [Select]

int BUTD = 2;                        //attribute une patte à un bouton
int BUTH = 3;
int BUTB = 4;
int BUTG = 5;
int val = 0;   
byte val2 = 0;
void setup(){
  pinMode(BUTD, INPUT);               //déclare le type entrée ou sortie
  pinMode(BUTH, INPUT);
  pinMode(BUTB, INPUT);
  pinMode(BUTG, INPUT);
  Serial.begin(9600);
}
void loop(){
  val = analogRead(A0);               //lit la valeur du potentiomètre
  val2 =map(val, 0, 1023, 0, 255);    //change le code de l'information de int en byte
  if(val2 >= 10 && val2 < 92){        //1ère vitesse + direction
    if(digitalRead(BUTH) == HIGH){
      Serial.print('A');
      delay(10);
    }
    if(digitalRead(BUTB) == HIGH){
      Serial.print('B');
      delay(10);
    }
    if(digitalRead(BUTD) == HIGH){
      Serial.print('C');
      delay(10);
    }
    if(digitalRead(BUTG) == HIGH){
      Serial.print('D');
      delay(10);
    }
  }
  if(val2 >= 92 && val2 < 174){       //2ème vitesse + direction
    if(digitalRead(BUTH) == HIGH){
      Serial.print('E');
      delay(10);
    }
    if(digitalRead(BUTB) == HIGH){
      Serial.print('F');
      delay(10);
    }
    if(digitalRead(BUTD) == HIGH){
      Serial.print('G');
      delay(10);
    }
    if(digitalRead(BUTG) == HIGH){
      Serial.print('H');
      delay(10);
    }
  }
  if(val2 >= 174 && val2 < 255){      //3ème vitesse + direction
    if(digitalRead(BUTH) == HIGH){
      Serial.print('I');
      delay(10);
    }
    if(digitalRead(BUTB) == HIGH){
      Serial.print('J');
      delay(10);
    }
    if(digitalRead(BUTD) == HIGH){
      Serial.print('K');
      delay(10);
    }
    if(digitalRead(BUTG) == HIGH){
      Serial.print('L');
      delay(10); 
    }
  }
}

Module 2
Code: [Select]

int Led = 2;
int Le = 4;
void setup(){
  Serial.begin(9600);
  pinMode(Led, OUTPUT);
  pinMode(Le, OUTPUT);
}
void loop(){
  if(Serial.available() > 0){
     if(Serial.read() == 'A'){
        digitalWrite(Led, HIGH);
        delay (10);
        digitalWrite(Led, LOW);
     }
     if(Serial.read() == 'B'){
        digitalWrite(Le, HIGH);
        delay (10);
        digitalWrite(Le, LOW);
     }
  }

Striker

On m'a parler de faire un set reset du Xbee mais je vois pas comment faire.....

skizoh

bonjour, avant même de tester des truc de fada.. tu a tester ton programme comme ça? parce que à 10ms d'allumage a chaque fois.. entre la vitesse de transmission de traitement etc.. si il passe 10ms puis rien pendant 500 normal que tu la vois pas s'allumer ta led.. bref sinon essaie d'afficher ce que tu reçois par le xbee pour voir si ça a bien le A ou le B ou on ne sais trop coi, ça sera déjà une piste..

Skizo
Un tien vaux mieux que deux tu l'auras !

Striker

j'ai changer les temps c'est tjr la meme chose mais j'ai remarque qu'il faut appuyer sur A puis sur B pour que la led s'allume

barbudor

Quote
void loop(){
  if(Serial.available() > 0){
     char c = Serial.read();
     if(c == 'A'){
        digitalWrite(Led, HIGH);
        delay (10);
        digitalWrite(Led, LOW);
     }
     if(c == 'B'){
        digitalWrite(Le, HIGH);
        delay (10);
        digitalWrite(Le, LOW);
     }
  }

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

AlienArea51

@Striker
Merci pour ton Mail et ta confiance  ;) :D

Je pense que Barbudor t'a donné la soluce  ;) :D
@+
Will
The truth is elsewhere !!

Striker

Un GRAND MERCI ! Ca fontionne du tonerre !
Depuis le temps que je cherche comment faire ......

Dite une autre question pour pas mourir idiot
Comment on fait pour envoyer 2 valeurs directement ?





Encore merci Barbudor et AlienArea51

barbudor

Je comprend pas ta question.
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Striker

exemple j'ai 2 module arduino/xbee

sur le premier j'ai les valeurs (bytes) de 2 potentiomètres que je veux envoyer au deuxième module

Je n'arrive pas à envoyer les valeurs une apres l'autres et que de l'autre côtés, le Xbee lise les valeurs




Y a 6 mois je bloquais sur sa et pas eu de solution

barbudor

Plusieurs solutions sont possibles :
- En ASCII
- En Binaire

Tu peux lire mon tuto sur comment implémenter un protocole ASCII sur une liaison série.
On peut facilement en faire une version binaire.

Au minimum tu peux faire : coté emetteur
Code: [Select]
Serial.print( "A:" ); Serial.println( valeur1 );
Serial.print( "B:" ); Serial.println( valeur2 );


et coté récepteur :
Code: [Select]
char buffer[20];

if ( Serial.available() )
{
    readBytesUntil( '\n', buffer, 20 );
    if ( strcmp( buffer, "A:" ) == 0 )
        valeur1 = atoi( buffer+2 );
    else if strcmp( buffer, "B:" ) == 0 )
        valeur2 = atoi( buffer+2 );
}

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Striker

J'ai plus qu'a tester cela


Merci beaucoup de ton aide !!

Go Up