Go Down

Topic: Arduino I2C (Read 2958 times) previous topic - next topic

Maxime598

Bonjour à tous je suis novice en Arduino (2jours).
Cependant j'aimerai communiquer en I2C entre deux cartes Arduino (maitre esclave), je suis tombé sur pas mal de forum expliquant le fonctionnement mais ils étaient toujours en anglais et je vous avouerai que je ne suis pas trés bon dans ce domaine.
Je vous sollicite donc dans le but que vous m'éclairiez ( cablage entre les deux cartes, programmes de base et savoir comment vérifier si la liaison est bien établie et que le tous fonctionne parfaitement).
Merci par avance!!

Luj06

J'ai adapté et documenté un exemple disponible ici : http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1195968384

Sur le maitre :

Code: [Select]

#include <Wire.h>

void setup()
{
 // initialise la liaison I2C en tant que maitre (pas de paramètre à begin)
 Wire.begin();
}

void loop()
{
 // commence à parler à la carte slave qui a déclaré l'adresse 0x01
 Wire.beginTransmission(0x01);
 Wire.send("Salut"); // envoie une chaine de caractères (pourrait être un tableau de byte ou...)
 Wire.endTransmission();  // arrête
 delay(500);
}


Sur l'esclave :

Code: [Select]

#include <Wire.h>

void setup()
{
 // initialise l'I2C en tant que slave (puisque il précise l'adresse 0x01
 Wire.begin(0x01);
 // déclare une fonction (ci-dessous) pour recevoir ce que le maitre envoit
 Wire.onReceive(recevoir);
 // pour pouvoir dire ce qui se passe
 Serial.begin(9600);
}

void loop()
{
 // rien de particulier, le code normal de la carte
 delay(100);
}

// déclenché par un envoi du maitre
void recevoir(int qty)
{
 Serial.print("> J'ai reçu ");
 Serial.print(qty);
 Serial.println(" octets.");
 // on lit octet par octet
 Serial.print("Le maitre dit : ");
 while(Wire.available() > 0)
 {
   char c = Wire.receive();
   Serial.print(c);
 }
 // dernier retour à la ligne
 Serial.println();
}


Maxime598

Merci de ta réponse!
Je suis sur d'avoir déja testé le programme se trouvant sur le lien que tu m'a envoyé.
Quand chaque programme est envoyé respectivement dans le maitre puis dans l'esclave. Comment vérifier qu'ils y sont bien, que l'ensemble fonctionne?
Faut il cabler chaque carte à un pc et se servir du "serial monitor"? ou un pc câblé sur la carte maitre peut suffir?
Désolé pour ces questions que vous jugerez probablement de trés bas niveau mais en y répondant vous m'apporterai une grande aide!

Merci d'avance!

Luj06

tu utilises le serial monitor sur le slave, puisqu'il y a des Serial.print() dans la méthode recevoir(int)

mais pourquoi faire aussi compliqué si tu débutes et que tu ne parles pas anglais ?

Maxime598

Je trouve sa bizar car j'avais mis, cet aprés midi, dans chaque carte le programme du lien que tu m'as donné (copier coller) connecté un pc par carte (un sur la maitre et un sur l'eclave) relié les sda et scl par des resistances de pull up (1K8). Aprés tout ceci j'avais lancé les serial monitor de chaque coté mais rien ne s'inscrivais!

Saurais tu pourquoi?


Pour te répondre c'est parce que je "travail" pour une personne qui creer des robots depuis des années et donc a besoin de nombreuses sorties pour des servos moteurs.
Je débute mais malgrés cela je doit m'adapter à ce qu'il demande sinon je ne lui serai d'aucune aide.

Merci beaucoup pour ta réponse je pourrai tester l'ensemble des demain matin.

Luj06

#5
Feb 26, 2009, 07:54 am Last Edit: Feb 26, 2009, 08:02 am by julien@pobot.org Reason: 1
D'abord mets une résistance de 4,7kOhms car 1,8 ce n'est pas suffisant.

Si rien ne s'affiche, il faut mettre plus de Serial.println : dans l'init, dans la boucle, etc...

Envoie moi un zip des projets si ça ne marche toujours pas.

Maxime598

Merci pour toute ces infos sa fonctionne parfaitement!

Go Up