Help.. probleme de compilation !

Bonjour,

J’ai un petit probleme dans mon code arduino pour récuperer une valeur lue sur un module zigbee RF distant . Je suis relativement novice , et j’ai du mal à trouver là où je me suis trompé , le message d’erreur ne m’aidant pas trop …
voici mon code :

#define NUM_ANALOG_SAMPLES 5         // 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();
    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 .
											//0x83 signifie que c'est une réception en mode d'adressage 16 bits
	  if (apiID == 0x83) {
	  //int analogSampleIndex = 19;
	  int moduleID = (packet[4] << 8) | packet[5];
	  int SgnlPwr = packet[6];
	  int SampleNumber = packet[8];
	  
	  if (SampleNumber >= 1)  {
	  
	 for (int 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
	 
	 // On converti la valeur lue  en millivolts
    float v = ((float)reading / 1023.0) * 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
    float c = v / 10.0;
	
	printPacket(dataLength+4);
	
	Serial.print("Module N° ");
	Serial.println(moduleID);
	Serial.print("Temperature: ");
	Serial.println(c);
	
	  }
	
	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();
    }
  }
}

et voici mes message d’erreur :

sketch_aug22a.cpp: In function 'void readPacket()':
sketch_aug22a:42: error: expected primary-expression before '<' token
sketch_aug22a:46: error: name lookup of 'i' changed for new ISO 'for' scoping
sketch_aug22a:29: error: using obsolete binding at 'i'
sketch_aug22a.cpp: At global scope:
sketch_aug22a:60: error: expected constructor, destructor, or type conversion before '(' token
sketch_aug22a:62: error: expected constructor, destructor, or type conversion before '.' token
sketch_aug22a:63: error: expected constructor, destructor, or type conversion before '.' token
sketch_aug22a:64: error: expected constructor, destructor, or type conversion before '.' token
sketch_aug22a:65: error: expected constructor, destructor, or type conversion before '.' token
sketch_aug22a:67: error: expected declaration before '}' token

Si quelqu’un avait une piste… merci d’avance

Bonjour,

Pour la premiére erreur :

for (int i=1;i=<SampleNumber;i++)

un supérieur ou égale c’est <= et non =< d’ou l’erreur.

Ensuite pour le lookup de i,
tu déclare i dans la boucle for ci dessus mais tu l’utilise aprés dans le if en dehors du for,
pour faire ça tu dois déclaré cette variable i bien avant la boucle for et le if !

Ensuite tu semble avoir mis des } un peu partout sans vraiment regarder ou et combien.

Ensuite Serial.println(moduleID); → moduleID pas déclaré, comme avec i il faut le déclarer avant le if.

J’éspére que ce code t’aidera :

#define NUM_ANALOG_SAMPLES 5         // 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();
    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; 
        
        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

      // On converti la valeur lue  en millivolts
      float v = ((float)reading / 1023.0) * 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
      float c = v / 10.0;

      printPacket(dataLength+4);

      Serial.print("Module N° ");
      Serial.println(moduleID);
      Serial.print("Temperature: ");
      Serial.println(c);
    }
  }
}

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();
    }
  }
}

Merci du coup de main, en effet j’ai fait pas mal de petites erreurs …

je m’ y remet de suite , merci !

ya pas de quoi bonne chance pour la suite de ton projet :wink: