Sujet : Xbee API LM35DZ décodage arduino

Bonjour à tous,Je me permet de vous écrire car j'ai un petit soucis, j'aimerai faire communiquer plusieurs xbee en utilisant les entrées analogiques de ces derniers.Pour le test, je possède deux xbee série 1 pro, un arduino UNO et un capteur de température LM35DZ.La partie envoi de la température est configurée en entrée ADC permettant de récupérer le data du capteur.Je reçois donc une trame de cette forme : 7E 00 0A 83 56 78 32 00 01 02 00 03 FF 77 J'ai bien compris à quoi correspondait mes différents octets. PAr contre le paquet 11 et 12 prend la valeur 03 FF soit 1024 la tension de référence. Lorsque je rapproche mon fer à souder vers mon capteur de température cette valeur devrait changer??Comment puis je alors récupérer cette valeur de température si ma trame reste inchangée?Voici mon code arduino.Merci d'avance


#define NUM_ANALOG_SAMPLES 0         // On définit la variable NUM_ANALOG_SAMPLES égale à 5
int packet[32];
int analogSamples[NUM_ANALOG_SAMPLES];

//=================== SETUP =================================
void setup() {
  Serial.begin(9600);
  delay(1000);
  Serial.print("Starting.........."); 
  Serial.println(); 
}

//==================== LOOP =================================
void loop() {


  readPacket();
}

//==================== podprogramy XBEE ======================
void readPacket() {                        // fonction readPacket lit les paquets de données transmis
  if (Serial.available() > 0) {
    int b = Serial.read();
   // Serial.print(b,HEX);
    if (b == 0x7E) {
      packet[0] = b;                         // On lit les trois premiers paquets puis on définit la taille des données transmises   
      packet[1] = readByte();
      packet[2] = readByte();
      int dataLength = (packet[1] << 8) | packet[2];  // Ici grace à datalength qui correspond a la concatenation du paquet 1 et 2

      for(int i=1;i<=dataLength;i++) {
        packet[2+i] = readByte();               // Ici on lit la suite des paquets reçus
      }
      
      
      
      int apiID = packet[3];                // On définit l ID API avec le paquet 3 .
      int moduleID;
      //0x83 signifie que c'est une réception en mode d'adressage 16 bits
      if (apiID == 0x83) {
        //int analogSampleIndex = 19;
        moduleID = (packet[4] << 8) | packet[5];
        int SgnlPwr = packet[6];
        int SampleNumber = packet[8];
        
        int i; // convert reading to millivolts


    
        
        if (SampleNumber >= 1)  {

          for (i=1;i<=SampleNumber;i++) {
            analogSamples[i] = (packet[10+i] << 8) | packet[11+i];
          }
        }    
        else {
          analogSamples[i]=-1;
        }
      }

      int reading = analogSamples[1];  // On lit la valeur de la broche  19
      //Serial.print(reading);
      // On converti la valeur lue  en millivolts
        float v = ((float)reading/ float(0x3FF)*1200.0;  //la valeur renvoyée ( 2 bits)  dans le paquet représente une valeur entiere sur une échelle de 0 à 1023 (0x0 - 0x3FF)
      //  le maximum de tension sur les broches analogiques est de 1200 mV
      // convert to Celcius.  10mv per Celcius degree
     
            // convert reading to millivolts
  

    // convert to Celcius.  10mv per Celcius degree with 500mV offset at 0 celcius
    

    
      printPacket(dataLength+4);
      Serial.print("data: ");
      Serial.println(reading);
      
      //Serial.print("Module ");
      //Serial.println(moduleID);
      //Serial.print("Temperature: ");
      Serial.println(v);
      //Serial.println();
      //Serial.println();
      
    }
  }
}

void printPacket(int l) {
  for(int i=0;i < l;i++) {
    if (packet[i] < 0xF) {
      // print leading zero for single digit values
     //Serial.print(0);
    }
    //Serial.print(packet[i], HEX);
    Serial.print(" ");
  }
  Serial.println("");
}

int readByte() {         // prog pour lire les données sur le port série. il renvoie la valeur serial.read
  while (true) {                        // si le port série est dispo et a une information
    if (Serial.available() > 0) {
      return Serial.read();
    }
  }
}

2

Re : Xbee API LM35DZ décodage arduino

A mon avis un problème de connexion du capteur de température (pull-up ?) ou de configuration du XBee.

Est-ce que le capteur fonctionnait sans la liaison XBee, mais simplement en récupérant sur l'Arduino ?