J'aimerai savoir s'il est possible avec un master reader/salve write d'envoyer depuis le salve un tableau de float à travers le bus I2C ? Si oui comment faire je n'arrive pas à adapter le programme, exemple disponible sur le site d'Arduino : https://www.arduino.cc/en/Tutorial/MasterReader
Oui sauf qu'il me semble qu'en standard la bibliothèque Wire limite les trames à 32 octets maximum, ce qui correspond à la taille de son buffer interne alloué de manière statique.
Donc un tableau de float serait limité à 8 occurrences.
NB : côté esclave I2C, si le float provient lui-même d'un calcul effectué sur des données plus petites, il serait plus judicieux de les transmettre directement sans calcul.
Exemple type : une sonde de température DS18B20, qui donne la température en binaire sur deux octets (= exprimée en nombre entier de seizièmes de degrés), il est dommage de convertir cette température en float car cela prend deux fois plus de places. La conversion en float n'est utile qu'au moment où on veut afficher la valeur de manière compréhensible par un oeil humain.
Idem si le float provient d'un calcul basé sur un analogRead.
Je suis désolé, mais je vais à nouveau émettre un avis contradictoire.
D'après ce qu'il m'a semblé voir en soulevant le capôt de la bibliothèque Wire.h, l'émission côté maître s'appuie également sur un buffer interne limité à 32 octets.
Wire.beginTransmission() se borne à mémoriser en RAM l'adresse de l'esclave, et à réinitialiser le buffer. Aucune action sur le bus I2C à ce niveau
Wire.write() remplit le buffer. Toujours aucune action sur le bus I2C à ce niveau
Wire.endTransmission() déclenche toutes les actions sur le bus I2C, à partir de ce qui a été stocké en RAM préalablement, et retourne un code qui indique si la transmission s'est bien passée.
Merci beaucoup pour vos réponses. Pour préciser un peu les donnés du problèmes, j'ai n'ai que 10 float maximum à envoyer
Je vais essayer tout cela se soir ou demain !
Les float proviennent de différents capteurs pour mesurer la concentrations de certains composants atmosphériques, certains capteurs sont issus de laboratoire de recherche, donc parfois ce sont des tensions qui serons analysées après, et d'autres donnent directement les concentrations en ppm avec des degrés de précision différents ! voilà
Et bien si c'est une tension, ça veut dire qu'à l'origine tu fais une mesure avec un convertisseur analogique - numérique qui te donne un résultat brut en binaire.
Par exemple un analogRead() sur une IO arduino donne un résultat brut sur 10 bits, compris entre 0 et 1023.
C'est une grandeur discrète qui n'admet que 1024 valeurs distinctes.
A ce stade, il n'y a aucun intérêt à le convertir tout de suite en tension valorisée dans un float. Ca bouffe le triple de place pour rien.
Tu peux conserver ta mesure brute stockée et remontée sur le bus I2C sur 2 octets sans t'embêter, ou même juste 10 bits (soit 4 mesures dans 5 octets).
Oui toute à fait mais les autres capteurs ne sont pas analogique malheureusement ^^
Je pense qu'il y a une erreur dans le programme de pepe pour le maître pour un tableau de 50 float p n'est pas déclaré je suppose qu'il s'agit du pointeur prec mais cela ne marche quand même :s