[Lib] EZPrint : Simplifiez l'usage de Serial, Client, et classes similaire

Bonjour

Avec un environnement où le principal moyen de debug est la liaison série, je peste souvent sur l'absence d'un moyen simple d'afficher des textes complexes.
Bref, mon bon vieux printf() me manque !

Il y a de bonnes raisons de ne pas chercher à utiliser printf() ou ne serais-ce que sprintf() mais sommes nous pour autant obligés de nous taper 15 lignes de Serial.print() chaque fois que nous voulons afficher une phrase constituée de chaines de caractères, de variables etc .... ???

NON !

EZPrint est une lib qui recrée les surchages de l'opérateur << souvent utilisé en C++ avec cout.
Grace à EZPrint(c) :wink: il est facile d'écrire ce genre de code beaucoup plus léger et beaucoup plus lisible :

  Serial << "This is a decimal value : " << dec << 123 << endl;
  Serial << "And this is a binary value : " << bin << 123 << endl;
  Serial << _PSTR("This string is stored in Flash memory" ) << endl;
  EZPrintDigits( 5 );
  Serial << "A float with 5 decimal digits : " << 4.0/3.0 << endl;

C'est mieux hein ?
Et çà marche avec n'importe quel classe dérivée de Stream/Print telles-que (et sans limitation) :

  • Tous les Serial, Serial2, Serial3, ...
  • SoftwareSerial
  • Client (Ethernet)
  • LiquidCrystal
    et bien d'autres .....

Comme d'hab, récupérez le ZIP ci-dessous et dezippez le dans votre répertoire arduino/Libraries.
Ensuite un simple #include "EZPrint.h" vous permettra de bénéficier de ses (nombreux) avantages :smiley:

ATTENTION : Pour mettre une chaîne de caractère en Flash, il faut utiliser _PSTR() eu lieu de PSTR().


Historique
1.0 20 mai 2012 version initiale

EZPrint-1_0.zip (3.49 KB)

A ça c'est une idée qu'elle est bonne

Bonjour,
C'est quoi les bonnes raisons pour ne pas utiliser printf et sprintf?
Gerse

Printf() sous entend l'existence d'un périphérique de sortie standard ce qui n'existe pas dans l'environnement arduino. Printf() n'est pas implémenté.

Sprintf() marche a condition de s'y prendre en 2 fois (sprintf puis serial.print) et d'allouer un buffer suffisant en permanence.

L'avantage de cette solution est qu'elle ne requière pas de buffer supplémentaire et le code généré est strictement équivalent a celui qui le serait en utilisant des Serial.print() séparés.

De plus il marche avec toute classe dérivée de Print (Serial, SoftwareSerial, EthernetClient, LiquidCrystal,...) Là où il n'est pas possible non plus d'utiliser fprintf() puisque la notion de gestionnaire de fichier n'est pas implémentée.

Salut:

Bref, mon bon vieux printf() me manque !

Je veux bien te croire c'est la même !!! :0

Skizo !