Liaison I2C, Master Reader/Slave Sender

Bonjour à tous,

Alors voilà, dans le cadre d'un projet, je dois réaliser une liaison série I2C afin d'envoyer plusieurs informations de l'esclave vers le maître (communication entre 2 cartes arduino).

J'ai, par exemple, branché 2 potentiomètres sur ma carte esclave en A0 et A1, j'envois ces 2 valeurs sur la carte maître mais je n'arrive pas à afficher l'une puis l'autre. Je suis obligé de garder cette configuration des cartes et je ne peux donc pas inverser le maître et l'esclave.
De plus, la liaison marche très bien pour un seul potentiomètre.

Du côté de l'esclave j'ai donc le code suivante :

#include <Wire.h>
int pot=A0;
int pot1=A1;

void setup() {
  Wire.begin(8);                
  Wire.onRequest(requestEvent); 
  Serial.begin(9600);
}

void loop() {
  delay(100);
}

void requestEvent() {
  Wire.write(map(analogRead(pot),0,1024,0,255));
  Wire.write(map(analogRead(pot1),0,1024,0,255));
}

Et c'est du côté du maître que ça pèche un peu plus, je ne vois pas vraiment comment bien distinguer la première donnée envoyé de la seconde.
Pour l'instant le code de son côté est comme-ceci :

#include <Wire.h>

void setup()
{
  Wire.begin();        
  Serial.begin(9600); 
}

void loop()
{
  Wire.requestFrom(8, 2);    

  while(Wire.available())   
  { 
    int c = Wire.read(); 
    Serial.println(c);      
  }
  delay(500);
}

J'ai essayé pas mal de possibilités et de chercher des exemples sur internet, mais sans franc succès dans cette configuration.

J'aimerai donc savoir si quelqu'un a déjà réaliser un programme similaire au mien, ou si vous avez une idée de réponse à m'apporter.

Je reste à disposition pour toutes infos complémentaires.

Merci à ceux qui répondre.

Amicalement

hello es tu passé ?

et si tu mettais un delay(1000) entre les deux envois?

Wire.write(map(analogRead(pot),0,1024,0,255));
delay(1000);
Wire.write(map(analogRead(pot1),0,1024,0,255));

Bonjour

Tout d'abord, merci d'éditer ton premier post pour mettre ton code entre une balise [code] et une balise [/code].

Voici quelques questions dont les réponses devraient te permettre de faire fonctionner ton code.

Côté esclave :
quel est le type de variable retourné par la fonction map() ?
comment réagit la fonction write() par rapport à ce type de variable ?

Bonjour,

Merci d'abord pour les réponses, les changements sur le post ont été effectués (désolé j'avais pas visité le lien pour créer un topic, je sais c'est mal :cry: ).

Concernant vos réponses, l'idée du delay est une bonne idée mais on souhaite plutôt travailler en "temps réel" et donc avoir un changement de valeurs instantanées...

Sinon, le type de variable retourné par la fonction map() reste un int il me semble. Et en gros une seule valeur est transmise ensuite à l'arduino maître....

hello
le delay peut etre beaucoup plus court que la seconde
fais des essais et tu verras que c'est de l'immédiat (ou presque)

Bonjour

Nous sommes dans un cadre pédagogique, donc par principe, même si je suis à peu près sûr de l'explication à tes symptômes, mon aide se limitera a te donner des indications sur les points que tu devras résoudre toi-même, c'est-à-dire en cherchant dans de la documentation de référence largement à portée de clic.

n4Gaa:
Sinon, le type de variable retourné par la fonction map() reste un int il me semble

Faux.
Ne suppose pas, vérifie.

n4Gaa:
Et en gros une seule valeur est transmise ensuite à l'arduino maître....

La transmission I2C se fait octet par octet...
Quel est le format de ta "valeur" ?