Arduino scan I2C

Des difficultés à faire fonctionner le bus I2C ? Un interface défaillant ? Ce petit programme est pour vous :
A partir de la carte Arduino, il interroge adresse par adresse le bus I2C. Si un composant fonctionne, et est présent sur ce bus, alors la carte vous envoie l'adresse de ce composant.


1. Câblage de la carte Arduino

Dans cet exemple, nous avons relié une carte Adafruit 1334 (capteur de couleur) sur le port I2C, suivant le câblage ci-dessous :
Les deux résistances sont des résistances de 1.5 kΩ

2. Programme

#include <Wire.h>     // Bibilothèque pour communication Arduino - I2C

// Initialisation des paramètres
void setup()
{
    Wire.begin();     // Initialisation de la communication avec I2C. Arduino : maitre.
    // Initialisation de la vitesse de transmission à 9600 bauds, entre PC et Arduino
    Serial.begin(9600);
    while (!Serial);     // On boucle (attente) tant que la communication série n'est pas réalisée.
    Serial.println("\nCOM Série : OK");
}

// Boucle du programme
void loop()
{
    byte statut, adresse;     // Définition de 2 variables sur 8 bits.
    int module;     // Définition d'un entier (2 octets).

    Serial.println("\nScan du Bus I2C ...");

    module = 0;
    for (adresse = 1; adresse < 127; adresse++)
    {
        Wire.beginTransmission(adresse);     // La communication se fera avec l'adresse indiquée.
        statut = Wire.endTransmission();     // Réponse du module interrogé.

        if (statut == 0)     // Module trouvé.
        {
            Serial.print("Module I2C trouvé à l'adresse 0x");
            Serial.println(adresse, HEX);
            module++;     // Nombre de modules trouvés + 1
        }

        else if (statut == 4)     // Erreur détectée.
        {
            Serial.print("Erreur inconnue trouvée à l'adresse 0x");
            Serial.println(adresse, HEX);
        }
    }
    if (module == 0)
    {
        Serial.println("Aucun module I2C trouvé");
    }
    else
    {
        Serial.println("Scan terminé");
    }
    delay(5000);     // Attente de 5 secondes avant un nouveau scan.
}

3. Affichage dans le moniteur serie