[Tuto] Utiliser 2 Arduinos en série

Posted On: août 9, 2013

Categories: Arduino

Tags: arduino , i2c , reseau , tuto

Utiliser 2 Arduinos en série

Le but de ce montage est d' allumer une LED connectée à un Arduino en la commandant depuis le second Arduino. Ce montage va utiliser le réseau I2C du Arduino.

Composants nécessaires :

2 Arduino

1 LED

1résistance (Optionnel)

Une Breadboard

Des fils de connexion

 
composants

Pour mettre en réseau les 2 Arduinos, nous allons utiliser l'interface I2C du Arduino. Le réseau I2C fonctionne sur le principe Maître / Esclave. Il peut y avoir un seul maître par réseau et plusieurs esclaves (chaque esclave a un identifiant). Cette interface nécessite 2 fils le SDA (Broche Analog A4) et SCL (Broche Analog A5). Grâce au réseau I2C, il est possible de connecter différentes cartes électroniques ou simple circuit intégré (« puce ») facilement comme le montre le schéma suivant :

schema i2c

On voit sur ce schéma que pour fonctionner les éléments du réseau doit être alimenté par la même alimentation. Pour simplifier ceci, nous allons alimenter le Arduino donnant la commande (qui sera le maître) avec le Arduino allumant la LED (qui sera l'esclave).

 Principe du montage :

Le montage va cette fois-ci se décomposer en 2 parties :

Le Arduino esclave: Le Arduino esclave aura une LED et sa résistance câblée entre sa sortie digital 2 et le GND. Il utilisera sa sortie 5V pour alimenter le Arduino maître.

Le Arduino maître : Le Arduino maître reçoit son alimentation du Arduino esclave sur son entrée Vin

 Pour terminer la bonne connexion de l'alimentation, il reste à connecter entre eux les GND des 2 arduinos.

 Pour établir la connexion entre ces 2 Arduinos, il va être nécessaire de raccorder les signaux SDA/SCL:

Entre la borne Analog 4 (SDA) du Arduino maître et la borne Analog 4 du Arduino esclave

Entre la borne Analog 5 (SCL) du Arduino maître et la borne Analog 5 du Arduino esclave

2 arduino en serie_scéma

Réalisation du montage :

 Pour le Arduino esclave, ce montage est le même que le montage « Allumer une LED »

Pour le Arduino maître, uniquement des connexions avec le Arduino esclave.

2 arduino en serie_bb
Montage

Programmation du montage :

La programmation de ce montage s'appuie sur la librairie Wire. Comme c'est une librairie, pour utiliser ces fonctions, il faudra écrire «Wire.nomdelafonction » .Elle contient les fonctions suivantes :

begin(X) : Initialise la liaison I2C. Se place dans la section « setup ». Le paramètre X est l'adresse de la carte esclave. Pour le maître le paramètre reste vide.

RequestFrom(X, Y) : Commande utilisée par le maître pour demander des informations aux esclaves (requête). Le paramètre X est l'adresse de l'esclave. Le paramètre Y est le nombre d'octets demandé.

beginTransmission(X) : Commande utilisée par le maître pour démarrer une transmission avec l'esclave de l'adresse X.

endTransmission() : Commande utilisée par le maître pour clore une transmission.

Write(X) : Commande utilisée par l'esclave pour répondre le message X à une demande du maître.

Available() : Renvoi le nombre d'octet disponible pour la lecture. C'est une fonction très intéressante pour savoir s'il y a des messages en attente de lecture.

Read() : Lit les message en attente sur le bus. Attention : La fonction read lit caractère par caractère.

OnReceive(X) : C'est une commande destinée uniquement à l'esclave qui va être appelée lorsqu'il y a des messages à lire la fonction X.

onRequest() : C'est une commande destinée uniquement à l'esclave qui va être appelée lorsqu'il y a une requête du maître.

 Le programme va lui aussi être coupé en 2, un pour chaque Arduino.

 ATTENTION : Il faut déconnecter les Arduinos durant la programmation !

 Programme du Arduino Esclave :

Le Arduino esclave définit qu'il a une sortie sur digital 2. Il dit que son adresse est la numéro 4. Il va attendre de recevoir le chiffre 1 sur l'interface I2C pour allumer la LED. Quand il reçoit 0 il éteint la LED.

#include  // Librairie pour la communication I2C
const int L1 = 2; // broche 2 du micro-contrôleur se nomme maintenant : L1
void setup()
{
Wire.begin(4); // Rejoindre le bus à l'adresse #4
Wire.onReceive(receiveEvent); // Preparer une fonction spécifique a la reception de donnee
Serial.begin(9600); // Demarrer la liaison serie avec le PC
pinMode(L1, OUTPUT); // L1 est une broche de sortie
}
void loop()
{
delay(100);
}
// Fonction qui s execute si quelque chose est present sur l interface
void receiveEvent(int howMany)
{
int x = Wire.read(); // recevoir un chiffre
Serial.println(x); // afficher ce chiffre sur l'interface serie
if(x == 1)
{
digitalWrite(L1, HIGH); // allumer L1
}
if(x == 0)
{
digitalWrite(L1, LOW); // eteindre L1
}
}

Programme du Arduino Maître :

Le Arduino maître envoie un 1 sur l'interface I2C, attend 1 seconde, envoi un 0 sur l'interface I2C, attend 2 secondes et recommence à l'infini.

#include 
void setup()
{
Wire.begin(); // Rejoindre le bus I2C (Pas besoin d adresse pour le maitre)
}
void loop()
{
//contenu du programmenWire.beginTransmission(4); // Envoyer vers device #4
Wire.write(1); // Envoi un 1
Wire.endTransmission(); // Arreter la transmissionndelay(1000); // Attendre 1s
Wire.beginTransmission(4); // Envoyer vers device #4
Wire.write(0); // Envoi un 0
Wire.endTransmission(); // Arreter la transmissionndelay(2000); // Attendre 2s
}

Il reste à brancher le Arduino pour compiler le programme et le téléverser.

Une fois terminé cela nous donne :


led OFF


LED éteinte


led ON

n

LED allumée

n

série


Interface série

Pour aller plus loin :

Il est possible de rendre autonome le montage en lui ajoutant un coupleur de pile. Il est aussi possible de modifier les temps allumés et éteints. On peut remplacer les temps par un bouton poussoir ce qui ferait un système de bouton déporté.

Comments

  • Justin
    févr. 22, 2018
    Bonsoir, nJ'aimerai faire comuniquer 2 arduino avec le fils (Uno et Méga) mais le code situé plus haut ne fonctionne pas.nPouvez vous m'aider ?
  • Jeremy
    janv. 8, 2018
    alors ?????
  • Jeremy
    janv. 8, 2018
    comment faire fonctionner 2 led simultanément ??.?????!!!!!!!!!!!!!!!!!!!!!!!!!!!.
  • Bernard JACOB
    août 24, 2017
    On sait pas lire les programme *.ino
  • soso
    juin 9, 2015
    Bonjour,nvotre code ma aider pour faire communiquer 2 arduinos mais je ne sais pas comment faire pour ajouter un capteur de temperature, lire cette valeur par un arduino et l'afficher avec l'autre sur un LCD.nMerci
  • soso
    juin 9, 2015
    Bonjour,nvotre code ma aider pour faire communiquer 2 arduinos mais je ne sais pas comment faire pour ajouter un capteur de temperature, lire cette valeur par un arduino et l'afficher avec l'autre sur un LCD.nMerci
  • grosmatou2
    juin 6, 2014
    nickelnj'ai teste tout est OKnmon esclave stocke les 4 variables dans la 24c16 et tout fonctionne en autonome apres separation maitre esclavende plus en effectuant la routine avec 5 adressesntelechargement possible des 5nmerci encore
  • grosmatou2
    juin 6, 2014
    nickelnj'ai teste tout est OKnmon esclave stocke les 4 variables dans la 24c16 et tout fonctionne en autonome apres separation maitre esclavende plus en effectuant la routine avec 5 adressesntelechargement possible des 5nmerci encore
  • grosmatou2
    juin 5, 2014
    merci finalement c'est tout simplenje ne voyait pas cela de cette facon nje vais tester sur mon montage et je vous tiens au courantnencore une fois merci de m'avoir enlevé cette epine du piedncordialement
  • grosmatou2
    juin 5, 2014
    merci finalement c'est tout simplenje ne voyait pas cela de cette facon nje vais tester sur mon montage et je vous tiens au courantnencore une fois merci de m'avoir enlevé cette epine du piedncordialement
  • admin
    juin 5, 2014
    Il faut que vous alliez mettre dans le maitre:nnWire.beginTransmission(4); // Selection de la balisenWire.write(heuredeb); // Envoi de heuredebnWire.write(minutedeb); // Envoi de minutedebnWire.write(heurefin); // Envoi de heurefinnWire.write(minutefin); // Envoi de minutefinnWire.endTransmission(); // Arreter la transmissionnnCeci est à faire en changeant le 4 pour chaque balisennCoté esclave (balise):nnDans le setupnWire.begin(4); // Rejoindre le bus à l'adresse #4nWire.onReceive(receiveEvent);nDans le loopnint heuredeb = Wire.read();nint minutedeb = Wire.read();nint heurefin = Wire.read();nint minutefin = Wire.read();
  • admin
    juin 5, 2014
    Il faut que vous alliez mettre dans le maitre:nnWire.beginTransmission(4); // Selection de la balisenWire.write(heuredeb); // Envoi de heuredebnWire.write(minutedeb); // Envoi de minutedebnWire.write(heurefin); // Envoi de heurefinnWire.write(minutefin); // Envoi de minutefinnWire.endTransmission(); // Arreter la transmissionnnCeci est à faire en changeant le 4 pour chaque balisennCoté esclave (balise):nnDans le setupnWire.begin(4); // Rejoindre le bus à l'adresse #4nWire.onReceive(receiveEvent);nDans le loopnint heuredeb = Wire.read();nint minutedeb = Wire.read();nint heurefin = Wire.read();nint minutefin = Wire.read();
  • grosmatou2
    juin 5, 2014
    une precisionnchaque "balise" est equipee d'une horloge ds1307 donc pas de mise a l'heurenles 4 variables sont utilisees dans un if(rtc.hour = heureAlarme et rtc.minute= minuteAlarme)nalors m'a boucle de fonctionnement emission balise demarre idem pou heureFine minuteFin qui arretent toutnc'est donc la fonction envoi du maitre vers le ou les esclaves (si necessaire 1 apres l'autre car je leur donnerai la meme adresse i2c)nque je n'arrive pas a comprendrencar d'apres votre code je ne reussi que l'envoi d'une variablenmerci un bout de code d'explication (maitre et esclave) serait le bienvenu pour me depatouiller.
  • grosmatou2
    juin 5, 2014
    une precisionnchaque "balise" est equipee d'une horloge ds1307 donc pas de mise a l'heurenles 4 variables sont utilisees dans un if(rtc.hour = heureAlarme et rtc.minute= minuteAlarme)nalors m'a boucle de fonctionnement emission balise demarre idem pou heureFine minuteFin qui arretent toutnc'est donc la fonction envoi du maitre vers le ou les esclaves (si necessaire 1 apres l'autre car je leur donnerai la meme adresse i2c)nque je n'arrive pas a comprendrencar d'apres votre code je ne reussi que l'envoi d'une variablenmerci un bout de code d'explication (maitre et esclave) serait le bienvenu pour me depatouiller.
  • grosmatou2
    juin 4, 2014
    actuellement j'ai stocke avec write.eeprom(1,10) pour l'heurenwrite.eeprom(2,45) pour la minutenwrite.eeprom(3,12) pour l'heure finnwrite.eeprom(4,45) pour la minute finnnil s'agit d'horaires de depart d'un cycle de balises pour radio orientationnje les parametre la veille et les installe le lendemain tranquilement en les posant je les allume et dans le void setup je vais relire ces données avec read.eepromnce qui fait que les balise demarrent toute a la bonne heure et s'arrettent a l'heure de temps de course maximum autorisénj'utilise l'ide arduino pour recharger le soir les balisesntrop contraignant pour un utilisateur basic.ndonc j'ai un module specifique appele balise depart. avec afficheur et des boutons poussoirs pour choisir et incrementer des heures et des minutes facilement et en raccordant selon votre principe je souhaite telecharger par un bouton transfert sur 5 balise de coursenmerci
  • grosmatou2
    juin 4, 2014
    actuellement j'ai stocke avec write.eeprom(1,10) pour l'heurenwrite.eeprom(2,45) pour la minutenwrite.eeprom(3,12) pour l'heure finnwrite.eeprom(4,45) pour la minute finnnil s'agit d'horaires de depart d'un cycle de balises pour radio orientationnje les parametre la veille et les installe le lendemain tranquilement en les posant je les allume et dans le void setup je vais relire ces données avec read.eepromnce qui fait que les balise demarrent toute a la bonne heure et s'arrettent a l'heure de temps de course maximum autorisénj'utilise l'ide arduino pour recharger le soir les balisesntrop contraignant pour un utilisateur basic.ndonc j'ai un module specifique appele balise depart. avec afficheur et des boutons poussoirs pour choisir et incrementer des heures et des minutes facilement et en raccordant selon votre principe je souhaite telecharger par un bouton transfert sur 5 balise de coursenmerci
  • admin
    juin 4, 2014
    Qu'entendez-vous par les "stocke sur le pas X de l'eeprom"?
  • admin
    juin 4, 2014
    Qu'entendez-vous par les "stocke sur le pas X de l'eeprom"?
  • grosmatou2
    juin 3, 2014
    merci d'avoir repondu,nj'ai du mal a suivrencar je doit envoyer vers l'esclave nla variable heuredebnla variable minutedebnpuis nla varieble heurefinnla variable minutefinnnje les recupere sur l'esclave et les stocke sur le pas n1 de l'eepromn2 de l'eepromn3 de l'eepromn4 de l'eepromna partir de la je sait faire car le programme que jutilisenmarchenau secours
  • grosmatou2
    juin 3, 2014
    merci d'avoir repondu,nj'ai du mal a suivrencar je doit envoyer vers l'esclave nla variable heuredebnla variable minutedebnpuis nla varieble heurefinnla variable minutefinnnje les recupere sur l'esclave et les stocke sur le pas n1 de l'eepromn2 de l'eepromn3 de l'eepromn4 de l'eepromna partir de la je sait faire car le programme que jutilisenmarchenau secours
  • admin
    mai 31, 2014
    Bonjour,nnCôté maître, vous devez faire passer vos variables via les commandes Wire.print. Je vous conseilles de mettre une annonce de variable Wire.print("heureAlarme"); puis sa valeur Wire.print(x);nnCôté esclave, vous utiliserez une détection sur le Wire.read avec un switch case.
  • admin
    mai 31, 2014
    Bonjour,nnCôté maître, vous devez faire passer vos variables via les commandes Wire.print. Je vous conseilles de mettre une annonce de variable Wire.print("heureAlarme"); puis sa valeur Wire.print(x);nnCôté esclave, vous utiliserez une détection sur le Wire.read avec un switch case.
  • grosmatou2
    mai 30, 2014
    bonjournje viens de tester votre bout de codenfonctionne supernmon probleme nje souhaite envoyer de mon maitre 4 variables:nheureAlarme=10;nminuteAlarme=45;nheureFin=12;nminuteFin=10;nles chiffres sont des exemplesnet les recuperer sur mon esclave pour les traiternavez vous un bout de code pour m'aider car novice.nmerci
  • grosmatou2
    mai 30, 2014
    bonjournje viens de tester votre bout de codenfonctionne supernmon probleme nje souhaite envoyer de mon maitre 4 variables:nheureAlarme=10;nminuteAlarme=45;nheureFin=12;nminuteFin=10;nles chiffres sont des exemplesnet les recuperer sur mon esclave pour les traiternavez vous un bout de code pour m'aider car novice.nmerci
  • QUINTIN Marc
    mai 25, 2014
    Bonjour, après plusieurs recherches sur les sites, j'ai remarqué :nque la fonction void receiveEvent(int howMany) et en fait une interruption et qu'il est recommandé qu'elle soit la plus courte possible, qu'elle ne comporte pas de delay ni millis puisque le programme s'arrête, et que si on veut utiliser le paramètre reçu dans l'esclave il faut la déclarer en variable volatile.nJe vous joins les 2 programmes modifiés qui cette fois ci fonctionne correctement.nSalutations.nn//************MAITRE*****************n#include // Librairie pour la communication I2Cn//com3nint led = 13;nint i=0;nnvoid setup()n{n Serial.begin(9600);n pinMode(led, OUTPUT);n Wire.begin();n}nvoid loop()n{n //contenu du programmen delay(2000); // Attendre 2sn Wire.beginTransmission(4); // Envoyer vers device #4n Wire.write(1); // Envoi un 1 a l'esclaven Wire.endTransmission(); // Arreter la transmissionn Serial.println("Envoi 1 a l'esclave");n i=0;n while (i!=6)n {n Serial.print(" i : " );n Serial.println(i);n digitalWrite(led, HIGH);n delay(500);n digitalWrite(led, LOW);n delay(500);n ++i;n }n delay(2000); // Attendre 2sn Wire.beginTransmission(4); // Envoyer vers device #4n Wire.write(0); // Envoi un 0 a l'esclaven Wire.endTransmission(); // Arreter la transmissionn Serial.println("Envoi 0 a l'esclave");n i=0;n while (i!=6)n {n Serial.print(" i : " );n Serial.println(i);n digitalWrite(led, HIGH);n delay(500);n digitalWrite(led, LOW);n delay(500);n ++i;n }n}n//*****************************************nn//******ESCLAVE*********n#include // Librairie pour la communication I2Cn//com4nint led = 13;nint i=0;nnvolatile int x=2; // déclaration variable volatile = stockée en RAMnnvoid setup()n{n Serial.begin(9600); // Demarrer la liaison serie avec le PCn pinMode(led, OUTPUT);n Wire.begin(4); // Rejoindre le bus à l’adresse #4n Wire.onReceive(receiveEvent); // Preparer une fonction spécifique a la reception de donneenn}nvoid loop()n{n if(x == 1)n {n Serial.print(" Recu du maitre x = ");n Serial.println(x); // afficher ce chiffre sur l’interface serien Serial.println(" LED pour x=1");n i=0;n while (i!=10)n {n Serial.print(" i : " );n Serial.println(i);n digitalWrite(led, HIGH);n delay(250);n digitalWrite(led, LOW);n delay(250);n ++i;n }n x=2;n }n if(x == 0)n {n Serial.print(" Recu du maitre x = ");n Serial.println(x); // afficher ce chiffre sur l’interface serien Serial.println(" LED pour x=0");n i=0;n while (i!=10)n {n Serial.print(" i : " );n Serial.println(i);n digitalWrite(led, HIGH);n delay(250);n digitalWrite(led, LOW);n delay(250);n ++i;n }n x=2;n }n}n// Fonction qui s execute si quelque chose est present sur l interfacenvoid receiveEvent(int howMany)n{n x = Wire.read(); // recevoir un chiffren}n//************************************************
  • QUINTIN Marc
    mai 25, 2014
    Bonjour, après plusieurs recherches sur les sites, j'ai remarqué :nque la fonction void receiveEvent(int howMany) et en fait une interruption et qu'il est recommandé qu'elle soit la plus courte possible, qu'elle ne comporte pas de delay ni millis puisque le programme s'arrête, et que si on veut utiliser le paramètre reçu dans l'esclave il faut la déclarer en variable volatile.nJe vous joins les 2 programmes modifiés qui cette fois ci fonctionne correctement.nSalutations.nn//************MAITRE*****************n#include // Librairie pour la communication I2Cn//com3nint led = 13;nint i=0;nnvoid setup()n{n Serial.begin(9600);n pinMode(led, OUTPUT);n Wire.begin();n}nvoid loop()n{n //contenu du programmen delay(2000); // Attendre 2sn Wire.beginTransmission(4); // Envoyer vers device #4n Wire.write(1); // Envoi un 1 a l'esclaven Wire.endTransmission(); // Arreter la transmissionn Serial.println("Envoi 1 a l'esclave");n i=0;n while (i!=6)n {n Serial.print(" i : " );n Serial.println(i);n digitalWrite(led, HIGH);n delay(500);n digitalWrite(led, LOW);n delay(500);n ++i;n }n delay(2000); // Attendre 2sn Wire.beginTransmission(4); // Envoyer vers device #4n Wire.write(0); // Envoi un 0 a l'esclaven Wire.endTransmission(); // Arreter la transmissionn Serial.println("Envoi 0 a l'esclave");n i=0;n while (i!=6)n {n Serial.print(" i : " );n Serial.println(i);n digitalWrite(led, HIGH);n delay(500);n digitalWrite(led, LOW);n delay(500);n ++i;n }n}n//*****************************************nn//******ESCLAVE*********n#include // Librairie pour la communication I2Cn//com4nint led = 13;nint i=0;nnvolatile int x=2; // déclaration variable volatile = stockée en RAMnnvoid setup()n{n Serial.begin(9600); // Demarrer la liaison serie avec le PCn pinMode(led, OUTPUT);n Wire.begin(4); // Rejoindre le bus à l’adresse #4n Wire.onReceive(receiveEvent); // Preparer une fonction spécifique a la reception de donneenn}nvoid loop()n{n if(x == 1)n {n Serial.print(" Recu du maitre x = ");n Serial.println(x); // afficher ce chiffre sur l’interface serien Serial.println(" LED pour x=1");n i=0;n while (i!=10)n {n Serial.print(" i : " );n Serial.println(i);n digitalWrite(led, HIGH);n delay(250);n digitalWrite(led, LOW);n delay(250);n ++i;n }n x=2;n }n if(x == 0)n {n Serial.print(" Recu du maitre x = ");n Serial.println(x); // afficher ce chiffre sur l’interface serien Serial.println(" LED pour x=0");n i=0;n while (i!=10)n {n Serial.print(" i : " );n Serial.println(i);n digitalWrite(led, HIGH);n delay(250);n digitalWrite(led, LOW);n delay(250);n ++i;n }n x=2;n }n}n// Fonction qui s execute si quelque chose est present sur l interfacenvoid receiveEvent(int howMany)n{n x = Wire.read(); // recevoir un chiffren}n//************************************************
  • admin
    mai 11, 2014
    Bonjour,nnPour commencer, avez-vous essayé de mettre le contenu de la fonction receiveEvent dans le loop sur le programme esclave? Est-ce que le programme maître fonctionne correctement?
  • admin
    mai 11, 2014
    Bonjour,nnPour commencer, avez-vous essayé de mettre le contenu de la fonction receiveEvent dans le loop sur le programme esclave? Est-ce que le programme maître fonctionne correctement?
  • QUINTIN Marc
    mai 10, 2014
    Ok pour les liens, mais ma question est toujours la même, je n'arrive pas à faire clignoter la led dans le programme ESCLAVE suivant mon premier message ou il manqué la librairie WIRE.nBonne soirée.nMarc.
  • QUINTIN Marc
    mai 10, 2014
    Ok pour les liens, mais ma question est toujours la même, je n'arrive pas à faire clignoter la led dans le programme ESCLAVE suivant mon premier message ou il manqué la librairie WIRE.nBonne soirée.nMarc.
  • admin
    mai 10, 2014
    Oui apparemment il y a un problème avec certains caractères voici les liens pour récupérer les programmes http://letmeknow.fr/files/_2_arduinos___Arduino_A.ino et http://letmeknow.fr/files/_2_arduinos___Arduino_B.ino
  • admin
    mai 10, 2014
    Oui apparemment il y a un problème avec certains caractères voici les liens pour récupérer les programmes http://letmeknow.fr/files/_2_arduinos___Arduino_A.ino et http://letmeknow.fr/files/_2_arduinos___Arduino_B.ino
  • QUINTIN Marc
    mai 9, 2014
    Je pense qu'il doit y avoir un problème avec les réponses commentaires, j'ai bien tapé sur le clavier dièse include plus petit Wire.h plus grand (#include ), mais n'apparait pas dans le texte de la réponse, peut être y qu'il y a un problème avec les caractères?nSalutations.nMarc.
  • QUINTIN Marc
    mai 9, 2014
    Je pense qu'il doit y avoir un problème avec les réponses commentaires, j'ai bien tapé sur le clavier dièse include plus petit Wire.h plus grand (#include ), mais n'apparait pas dans le texte de la réponse, peut être y qu'il y a un problème avec les caractères?nSalutations.nMarc.
  • QUINTIN Marc
    mai 9, 2014
    #include // Librairie pour la communication I2C.nBonjour Fabien, merci pour la réponse rapide.nj'ai bien précisé le nom de la librairie comme si dessus (c'était une erreur de copie), mais toujours sans résultat.nCordialement.nMarc.
  • QUINTIN Marc
    mai 9, 2014
    #include // Librairie pour la communication I2C.nBonjour Fabien, merci pour la réponse rapide.nj'ai bien précisé le nom de la librairie comme si dessus (c'était une erreur de copie), mais toujours sans résultat.nCordialement.nMarc.
  • admin
    mai 9, 2014
    Bonjour,nnAprès le #include il manque le nom de la librairie, il faut le remplacer par #include <Wire.h>nnCordialement,nnFabien
  • admin
    mai 9, 2014
    Bonjour,nnAprès le #include il manque le nom de la librairie, il faut le remplacer par #include <Wire.h>nnCordialement,nnFabien
  • QUINTIN Marc
    mai 9, 2014
    Bonjour, j'essaye de faire communiquer 2 Arduinos, votre TUTO m'a beaucoup aidé.nJ'ai modifié pour pouvoir faire clignoter une led sur la broche 13, mais sans succés.nJe vous joins les 2 programmes effectués, il sont similaire au votre.nPouvez-vous me dire ou est mon erreur.nCordialement.nn//************MAITRE*****************n#include n//com3nint led = 13;nint i=0;nnvoid setup()n{n Serial.begin(9600);n pinMode(led, OUTPUT); n Wire.begin(); n}nvoid loop()n{n //contenu du programmen Wire.beginTransmission(4); // Envoyer vers device #4n Wire.write(1); // Envoi un 1n Wire.endTransmission(); // Arreter la transmissionn delay(2000); // Attendre 2sn Serial.println("envoi 1");n i=0;n while (i!=10)n {n Serial.print("i : ");n Serial.println(i);n digitalWrite(led, HIGH); n delay(50); n digitalWrite(led, LOW); n delay(50); n ++i; n } n Wire.beginTransmission(4); // Envoyer vers device #4n Wire.write(0); // Envoi un 0n Wire.endTransmission(); // Arreter la transmissionn delay(2000); // Attendre 2sn Serial.println("envoi 0");n i=0;n while (i!=10)n {n Serial.print("i : ");n Serial.println(i);n digitalWrite(led, HIGH); n delay(50); n digitalWrite(led, LOW); n delay(50); n ++i; n } nn}nnn//******ESCLAVE*********n#include // Librairie pour la communication I2Cn//com4nint led = 13;nint i=0;nnvoid setup()n{n Wire.begin(4); // Rejoindre le bus à l'adresse #4n Wire.onReceive(receiveEvent); // Preparer une fonction spécifique a la reception de donneen Serial.begin(9600); // Demarrer la liaison serie avec le PCn pinMode(led, OUTPUT); n}nvoid loop()n{n delay(100);n}n// Fonction qui s execute si quelque chose est present sur l interfacenvoid receiveEvent(int howMany)n{n int x = Wire.read(); // recevoir un chiffren Serial.print("x = ");n Serial.println(x); // afficher ce chiffre sur l'interface serien if(x == 1)n {n Serial.println("LED pour x=1");n i=0;n while (i!=10)n {n Serial.println(i);n digitalWrite(led, HIGH); n delay(50); n digitalWrite(led, LOW); n delay(50); n ++i; n }n }n if(x == 0)n {n Serial.println("LED pour x=0");n i=0;n while (i!=10)n {n Serial.println(i);n digitalWrite(led, HIGH); n delay(50); n digitalWrite(led, LOW); n delay(50); n ++i; n }n }n}
  • QUINTIN Marc
    mai 9, 2014
    Bonjour, j'essaye de faire communiquer 2 Arduinos, votre TUTO m'a beaucoup aidé.nJ'ai modifié pour pouvoir faire clignoter une led sur la broche 13, mais sans succés.nJe vous joins les 2 programmes effectués, il sont similaire au votre.nPouvez-vous me dire ou est mon erreur.nCordialement.nn//************MAITRE*****************n#include n//com3nint led = 13;nint i=0;nnvoid setup()n{n Serial.begin(9600);n pinMode(led, OUTPUT); n Wire.begin(); n}nvoid loop()n{n //contenu du programmen Wire.beginTransmission(4); // Envoyer vers device #4n Wire.write(1); // Envoi un 1n Wire.endTransmission(); // Arreter la transmissionn delay(2000); // Attendre 2sn Serial.println("envoi 1");n i=0;n while (i!=10)n {n Serial.print("i : ");n Serial.println(i);n digitalWrite(led, HIGH); n delay(50); n digitalWrite(led, LOW); n delay(50); n ++i; n } n Wire.beginTransmission(4); // Envoyer vers device #4n Wire.write(0); // Envoi un 0n Wire.endTransmission(); // Arreter la transmissionn delay(2000); // Attendre 2sn Serial.println("envoi 0");n i=0;n while (i!=10)n {n Serial.print("i : ");n Serial.println(i);n digitalWrite(led, HIGH); n delay(50); n digitalWrite(led, LOW); n delay(50); n ++i; n } nn}nnn//******ESCLAVE*********n#include // Librairie pour la communication I2Cn//com4nint led = 13;nint i=0;nnvoid setup()n{n Wire.begin(4); // Rejoindre le bus à l'adresse #4n Wire.onReceive(receiveEvent); // Preparer une fonction spécifique a la reception de donneen Serial.begin(9600); // Demarrer la liaison serie avec le PCn pinMode(led, OUTPUT); n}nvoid loop()n{n delay(100);n}n// Fonction qui s execute si quelque chose est present sur l interfacenvoid receiveEvent(int howMany)n{n int x = Wire.read(); // recevoir un chiffren Serial.print("x = ");n Serial.println(x); // afficher ce chiffre sur l'interface serien if(x == 1)n {n Serial.println("LED pour x=1");n i=0;n while (i!=10)n {n Serial.println(i);n digitalWrite(led, HIGH); n delay(50); n digitalWrite(led, LOW); n delay(50); n ++i; n }n }n if(x == 0)n {n Serial.println("LED pour x=0");n i=0;n while (i!=10)n {n Serial.println(i);n digitalWrite(led, HIGH); n delay(50); n digitalWrite(led, LOW); n delay(50); n ++i; n }n }n}

Leave a comment

Sign in