[résolu] SRF_08. Librairie. Un bug ou un manque du fixe ?

Bonjour,

Je débarque sur ce forum. Je trouve ça sympa qu'on est une section Français rien qu'à nous ! Merci à la communauté de permettre à tous d'aborder la technologie des micro-contrôleurs.

Depuis que j'ai commencer l'électronique, il y a 20 ans maintenant, j'ai vue débarqué nombre de technologies. J'ai débuter la programmation par des automates, puis du basic stamp, je suis resté très longtemps sur PIC16F et finalement, je me retourne vers ce qui est de plus en plus usité. L"arduino.

Je me suis piqué au jeu, j'ai déjà réussi à faire fonctionné sans mal un afficheur LCD 2*16 grâce à la librairie incluse.

Il me restais, dans mes tablettes, un SRF_08. J'ai vue qu'il existait une librairie et je l'ai incluse.
En suivant la documentation ici : Arduino Playground - HomePage , je me suis rendu compte qu'il fallait fixé le code.
Respectivement :

Fixes required for Arduino 1.0:
Sonar_srf08.h:9: Replace WProgram.h with Arduino.h
Sonar_srf08.cpp:35-36,64: Replace Wire.send with Wire.write
Sonar_srf08.cpp:81-82: Replace Wire.receive with Wire.read

C'est ce que j'ai fait et ça doit être bon !

En revanche, j'ai une nouvelle exception à la compilation lorsque j'ajoute la librairie: Et là... pas d'information sur le pourquoi du comment !
Je vous montre ce qui se passe :

/home/geeks/sketchbook/libraries/Sonar_srf08/Sonar_srf08.cpp:52: erreur: l'étiquette du « case » ne se réduit pas en une constante entière

Donc le switch-case du .cpp c'est pas correct !
Il va de soit que je voudrais comprendre pourquoi et régler ce problème. Si c'est possible et pas trop demandé.

Pour la partie technique, j'ai une Arduino Uno R2 et un srf08, un afficheur LCD.

J'aimerais bien afficher les valeurs sur l'affichage.

Merci pour vos indications.

Il y a une erreur dans le code de Sonar_srf08.cpp. Les constantes i et c dans les case (aux lignes indiquées dans le message d'erreur) sont définies comme des chaines de caractères avec des guillemets "i" "c" au lieu d'apostrophes 'i' 'c'.

Code corrigé (en tout cas il compile chez moi)

void Sonar_srf08::setUnit(int commandRegister, int address, char units){
  switch(units) {
	  case 'i': 
  Sonar_srf08::sendCommand(commandRegister, address, 0x50);
  break;
	  case 'c': 
  Sonar_srf08::sendCommand(commandRegister, address, 0x51);
  break;
  default:
  Serial.print("Invalid Units Entered...");
  Serial.println();
  }
}

Ah oui… Effetivement! Bon je sait maintenant que c’est un cas à regardé.

Tien, tant que j’y suis, maintenant, j’ai une nouvelle erreur, toujours dans le même fichier. C’est ennuyeux d’avoir autant de bug dans un source fourni dans le site lui même de la carte. Enfin je dit ça, on a peut-être pas la même compilation. Ou la même chaine croisé.

Est-ce que c’est le fait d’être sous Linux qui pose tant de problème ? A tout hasard !
Enfin, bon je peux switcher mais j’en voie pas l’intérêt !

Bon, l’erreur en question :slight_smile:

member function ‘int Sonar_srf08::readData(int, int)’:
/home/geeks/sketchbook/libraries/Sonar_srf08/Sonar_srf08.cpp:78: erreur: ‘Wire’ was not declared in this scope

Et le code qui est à cet endroit, bien sûr :wink:

// Read data from register return result

int Sonar_srf08::readData(int address, int numBytes){
  int result = 0;        // the result is two bytes long
  // send I2C request for data:
  Wire.requestFrom(address, numBytes);
  // wait for two bytes to return:
  while (Wire.available() < 2 )   {
    // wait for result
  }
  // read the two bytes, and combine them into one int:
  delay(50);
  //result = Wire.receive() * 256;
  //result += Wire.receive();
  result = Wire.read() * 256;
  result += Wire.read();
  
  // return the result:
  return result;
}

La ligne 78, cez moi, c’est : Wire.requestFrom(address, numBytes);

Je suppose à une conversion manquante !

Ca y est, en fait, j’avais oublier un include dans mes tests :astonished:
Je passe en résolu.

Merci du coup de pouce plus haut :grin: