Bonjour,
si la question est "est il possible de raccorder plusieurs modules i2c à mon arduino ?"
la réponse est "oui, l'interface i2c a été créée pour cela"
j'ai meme essayer ceci sans succé car je ne c'est pas quoi mettre dans l'arduino esclave " celle ou LCD est connecter"
de base c'est prevu pour un : PCF8574P
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x20,16,2); // set the LCD address to 0x20 for a 16 chars and 2 line display
void setup()
{
lcd.init(); // initialize the lcd
// Print a message to the LCD.
lcd.backlight();
lcd.print("Hello, world!");
}
void loop()
{
}
Il serait bien aimable et bienvenu de lire ou relire la charte ainsi que de consulter le sujet sur la façon d'écrire les messages, ces deux éléments se trouvent en tête des messages du forum.
Ensuite, fort de ces nouvelles informations, il serait judicieux que vous éditiez, au moyen du bouton dédié à cet effet dans la fenêtre de rédaction de sujet, les messages contenant du code afin d'insérer les dits codes entre les balises idoïnes.
je viens de tester master envoi donne a slave pour alumer led "sa fonctionne :
maitre :
#include <Wire.h>
void setup()
{
Wire.begin(); // Rejoindre le bus I2C (Pas besoin d adresse pour le maitre)
}
void loop()
{
//contenu du programme
Wire.beginTransmission(4); // Envoyer vers device #4
Wire.write(1); // Envoi un 1
Wire.endTransmission(); // Arreter la transmission
delay(1000); // Attendre 1s
//test
Wire.beginTransmission(4); // Envoyer vers device #4
Wire.write(2); // Envoi un 1
Wire.endTransmission(); // Arreter la transmission
delay(1000); // Attendre 1s
Wire.beginTransmission(4); // Envoyer vers device #4
Wire.write(0); // Envoi un 0
Wire.endTransmission(); // Arreter la transmission
delay(2000); // Attendre 2s
//test
Wire.beginTransmission(4); // Envoyer vers device #4
Wire.write(3); // Envoi un 0
Wire.endTransmission(); // Arreter la transmission
delay(2000); // Attendre 2s
}
esclave :
#include <Wire.h> // Librairie pour la communication I2C
const int L1 = 2; // broche 2 du micro-contrôleur se nomme maintenant : L1
const int L2 = 3;
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
pinMode(L2, OUTPUT);
}
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
}
if(x == 2)
{
digitalWrite(L2, HIGH); // allumer L1
}
if(x == 3)
{
digitalWrite(L2, LOW); // eteindre L1
}
}
donc la je suis dans le cas 1 "je pense "
par contre j'essaye d'ajouter un retour mais la plus rien ne fonctionne code :
maitre :
#include <Wire.h>
const int T1 = 3; // led pour retour
void setup()
{
Wire.begin(0); // Rejoindre le bus I2C (je lui donne une adresse pour le retour)
Wire.onReceive(receiveEvent); // Preparer une fonction spécifique a la reception de donnee
pinMode(T1, OUTPUT);
}
void loop()
{
//contenu du programme
Wire.beginTransmission(4); // Envoyer vers device #4
Wire.write(1); // Envoi un 1
Wire.endTransmission(); // Arreter la transmission
delay(1000); // Attendre 1s
//test
Wire.beginTransmission(4); // Envoyer vers device #4
Wire.write(2); // Envoi un 1
Wire.endTransmission(); // Arreter la transmission
delay(1000); // Attendre 1s
Wire.beginTransmission(4); // Envoyer vers device #4
Wire.write(0); // Envoi un 0
Wire.endTransmission(); // Arreter la transmission
delay(2000); // Attendre 2s
//test
Wire.beginTransmission(4); // Envoyer vers device #4
Wire.write(3); // Envoi un 0
Wire.endTransmission(); // Arreter la transmission
delay(2000); // Attendre 2s
}
//partie du retour
// 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 == 11)
{
digitalWrite(T1, HIGH); // allumer L1
}
if(x == 10)
{
digitalWrite(T1, LOW); // eteindre L1
}
}
esclave :
#include <Wire.h> // Librairie pour la communication I2C
const int L1 = 2; // broche 2 du micro-contrôleur se nomme maintenant : L1
const int L2 = 3;
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
pinMode(L2, OUTPUT);
}
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
//test retour
Wire.beginTransmission(0); // Envoyer vers device #4
Wire.write(10); // Envoi un 10
Wire.endTransmission(0); // Arreter la transmission
}
if(x == 0)
{
digitalWrite(L1, LOW); // eteindre L1
//test retour
Wire.beginTransmission(0); // Envoyer vers device #4
Wire.write(11); // Envoi un 11
Wire.endTransmission(0); // Arreter la transmission
}
if(x == 2)
{
digitalWrite(L2, HIGH); // allumer L1
}
if(x == 3)
{
digitalWrite(L2, LOW); // eteindre L1
}
}