Pages: [1]   Go Down
Author Topic: I2C et texte en string  (Read 517 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 0
Posts: 113
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Pour les besoins de mon projet, j'envoie une fonction spécifique qui me simplifie la tache pour l'I2C:
ecrireCarte("Telecommande 433Mhz", 01);

Ensuite, je fais
void ecrireCarte(String texte, int positionEcran) {
  Wire.begin();  //Amorce la connection sur SDA et SCL
  Wire.beginTransmission(adresse); //Appelle la carte
  Wire.write(position);  //Sur la carte
  Wire.write(texte);  //Ecrire un texte
  Wire.endTransmission();  //Ferme la connexion sur SDA et SCL
}

Hélas, ça plante sur Wire.write(texte);  //Ecrire un texte car il met "T_l_commande_V_1_0:113: error: no matching function for call to ‘TwoWire::write(String&)’" à la compilation.

Je songe à une conversion String to Byte. Mais pas sûr que ça vienne de là. Vous aurez noté que j'ai utilisé la librairie Wire.

Merci de m'indiquer s'il y a un moyen simple de passé en paramètre du texte pour la retransmettre sur la carte annexe via l'I2c et la librairie Wire.

Merci.
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Les seules formes de write sont :

Code:
    size_t write(uint8_t);
    size_t write(const uint8_t *, size_t);

Mais comme TwoWire dérive de Stream qui dérive de Print, tu hérite de :

Code:
    size_t print(const String &);
    size_t println(const String &s);

Donc la solution est
Code:
Wire.print( texte );

RTFC
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Offline Offline
Full Member
***
Karma: 0
Posts: 113
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok, ça fonctionne parfaitement smiley

Au départ j'avais mis un char, comme je transmet aussi par le biais de Serial1.write(), char dans un cas et char dans l'autre.

Je suppose que Serial.print() aura le même effet que Serial.write() mais avec des strings ?
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 113
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Finalement ça le fait parfaitement smiley-wink
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Compte tenu de la hierarchie de classe que j'ai expliqué plus haut (TwoWire -> Stream -> Print) je t'invite a regarder l'API de Stream dont toute classe dérivée hérite : http://arduino.cc/en/Reference/Stream
Ainsi que celle de Print qui n'est pas documenté sur le site mais tu trouveras Print.h dans arduino/hardware/arduino/core

C'est le cas de Serial, LiquidCrystal (et les classes LCD dérivées), EthernetClient, ....

D'ailleurs pour piloter ton LCD, je t'invite a implémenter une classe similaire à LiquidCrystal et LiquidCrystalI2C.
Le principe est de respecter une API standardisée pour les LCD caratères tout en héritant des méthodes de Stream/Print. Ainsi n'importe quel code qui utilise cette API peut passer d'un modèle de LCD a un autre juste en changeant le module (bibliothèque) d'interface.
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Offline Offline
Full Member
***
Karma: 0
Posts: 113
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oui, c'est une idée la librairie externe pour le pilotage d'un LCD sur I2C. Mais je me débrouille très bien avec les quelques fonctions que j'ai créer.

Par contre je suis d'accord avec toi pour ce qui est de se renseigner sur la doc. Ceci dit, j'ai pas vraiment eu de gros projet avant celui-ci. Le temps que je trouve le bon protocole, le bon moyen de transmission, je me suis rendu compte que je pratiquais pas tant que ça le codage. J'aurais même tendance à laisser ça aux gens qui savent coder mieux que moi.

Par contre, avoir vos avis et vos indication est un gros plus dans la recherche de piste quand toutes mes recherches habituelles n'ont pas aboutis.

Je regarde cette doc et si j'ai des questions, je vous ferais signe sur ce post. J'en profite pour parler du second problème qui est sur l'autre post. C'est une histoire de trame à dé-tramer.

A plus.
Logged

Pages: [1]   Go Up
Jump to: