Wire.h

Bonjour je suis nouveau et je m'intéresse à ce petit gadget qu'est Arduino UNO.
Je viens de m'en procurer un avec un afficheur LCD 1602 (16 caractères et 2 lignes).
Il est arrivé avec une carte I2C et ne sachant pas l'adresse j'ai voulu lancer un programme code qui devrait permettre de trouver l'adresse.

#include <Wire.h>
void setup()
{
  Wire.begin();
  Serial.begin(9600);
  Serial.println("\nI2C Scanner");
}

void loop()
{
  byte error, address;
  int nDevices;
  Serial.println("Recherche en cours...");
  nDevices = 0;
  for(address = 1; address < 127; address++ ) 
  {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

Serial.print("retour de Wire");

    if (error == 0)
    {
      Serial.print("Equiment I2C trouve a l'addresse 0x");
      if (address<16) 
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");
      nDevices++;
    }
    else if (error==4)
    {
      Serial.print("Erreur inconnue a l'address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("Aucun Equipement I2C trouve\n");
  else
    Serial.println("Fini\n");

  delay(5000);           
}

Après plusieurs tentative j'ai remarqué que mon programme se bloque à la ligne
error = Wire.endTransmission();

Même en déconnectant l'afficheur, alors que la réponse devrait être "Aucun équipement I2C trouve\n"
rien ne se passe.
Comment je sais que le programme ne répond plus après la ligne ci-dessus?
J'ai ajouté une ligne
Serial.Print(retour de Wire);
cette ligne ne s'affiche pas.

Merci si quelqu'un à une idée du problème et a bientôt

hello
ta ligne bloque le prg à la compilation
mettre:
Serial.print(error);

Serial.print sans P majuscule

Salut dfgh,
Merci pour ta réponse,
Tu as raison j'ai mal translaté le code et c'est bien ce que j'ai fait j'ai mis
Serial print(error);
Serial. print(address);
je l'ai même mis entre les ligne ci-dessous et là j'ai la réponse

Wire.beginTransmission(address);

Serial print(error);
Serial. print(address);

error = Wire.endTransmission();

Serial print(error);
Serial. print(address);

j'ai bien une réponse pour les deux premiers Serial.print
mais rien après la ligne error = Wire.endTransmission();

J'ai un doute sur les sorties analogique de ma carte pourraient-elles être endommagée d'où le
blocage du programme sur la ligne code
error = Wire.endTransmission();

Merci d'avance

Bonjour

Normal que ça coince dans endTransmission car c'est au cours de l'exécution de cette fonction qu'a lieu la communication réelle sur le bus (les fonctions précédentes begin et write ne font qu'alimenter des variables en ram).

Je suis déjà tombé là-dessus.
Il me semble que c'est une grosse faiblesse (pour ne pas dire un bug) de la librairie Wire lorsqu'il y a une anomalie électrique sur le bus I2C = une ligne maintenue à GND et dans ce cas l'arduino attendrait éternellement que le bus soit libre pour y causer.

Présence de résistances de tirage à 5 V sur SDA et SCL?
Présence d'un périphérique esclave douteux?

Un test à l'oscillo permettrait probablement de préciser le diagnostic.

Merci Bricoleau pour ton commentaire.
Je n'ai pas tout compris mais pour info même si je ne connecte pas l'afficheur le programme se bloque alors qu'il devrait me dire Serial.println("Aucun Equipement I2C trouve\n");

Mais merci quand même pour ton intérêt à mon problème

Et en ajoutant des résistances de 4700 Ohm (normalement recommandées) pour le tirage à 5V?

A4------4k7------5V
A5------4k7------5V

Voilà, je suis de retour.
J'ai essayé la solution de Bricoleau mais rien. Toujours pas de réponse de mon arduino uno.
Si une bonne âme voudrait bien essayer mon code, sans rien brancher, je serait fixé si c'est ma carte arduino qui a un problème ou pas.

Merci d'avance

tu utilises les bonnes pins pour l' I2C ?
sur arduino c'est SDA=A4 and SCL=A5

Le problème ne vient pas du branchement car même si on ne branche rien on devrait avoir une réponse.

Il faut juste essayer mon code du début tel quel, sans rien brancher, et me dire si il y a une réponse.

Sur mon arduino uno tout se bloque à la commande "error = Wire.endTransmission();" je n'ai plus de

retour après cette commande.

Merci

ssalva:
Le problème ne vient pas du branchement car même si on ne branche rien on devrait avoir une réponse.

Faux
Le minimum du minimum est de mettre les résistances indiquées en #5

Oui bricoleau, j'ai bien mis les résistances comme tu m'as conseillé mais toujours rien. C'est pour ça que je demandais si quelqu'un pouvait essayer. Car avant de commander une nouvelle carte je voulais être sûre que ma carte était out.
Merci

Ben voilà, après tout ce temps perdu en utilisant un oscilloscope je me suis aperçu qu'un court-circuit, dû à de la pâte à soudé, était présent entre mes pin A5 et A4 de ma carte arduino.

Merci à tout ceux qui on perdu du temps à me conseiller et spécialement à bricoleau.

Je posterait un autre sujet car j'ai un nouveau problème. A bientôt