Pages: [1]   Go Down
Author Topic: Arduino I2C  (Read 2723 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 9
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!!
Logged

Sophia-Antipolis (06)
Offline Offline
God Member
*****
Karma: 4
Posts: 618
Rejoignez le club !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Sur le maitre :

Code:
#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:
#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();
}
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 9
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!
Logged

Sophia-Antipolis (06)
Offline Offline
God Member
*****
Karma: 4
Posts: 618
Rejoignez le club !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 9
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Sophia-Antipolis (06)
Offline Offline
God Member
*****
Karma: 4
Posts: 618
Rejoignez le club !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: February 26, 2009, 02:02:46 am by julien@pobot.org » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 9
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci pour toute ces infos sa fonctionne parfaitement!
Logged

Pages: [1]   Go Up
Jump to: