Accents francophoneS dans le port série

Sérieux, y a t-il quelque chose, genre une librairie ou une formule magique, pour faire sortir les bons accents du port série?

Et tant qu'à être là, j'utilise souvent le participe passé dans mes noms de variable, donc y a t-il une passe pour pouvoir faire des é dans le code sans que ça chie?

Bonjour,

Frédéric_Plante: Sérieux, y a t-il quelque chose, genre une librairie ou une formule magique pour faire sortir les bons accents du port série?

Vaste sujet, Arduino ne gère pas les caractères accentués et pose problème en général pour les caractères ASCII >127. Il est possible de contourner le problème en interceptant ces caractères et en les gérants différemment. Le codage UTF-8 utilisé par arduino génère un double code pour les caractères >127. Tu peux consulter le post suivant qui aborde le sujet : http://forum.arduino.cc/index.php?topic=212265.msg1555968#msg1555968

Frédéric_Plante: Et tant qu'à être là, j'utilise souvent le partcipe passé dans mes noms de variable, donc y a t-il une passe pour pouvoir faire des é dans le code sans que ça chie?

Pour le nom des variables, je ne pense pas que cela soit admis ni même possible.

Bonjour les Amis, Oui, pour moi également ne pas pouvoir accentuer les variables est une "torture". Comme je n'arrive pas à lire autre chose que ce qui est écrit, quand il n'y a pas les accents je suis assez dérouté. Du coup, je me force à changer le nom des variables jusqu'à trouver un identificateur qui signifie presque pareil et qui ne comporte pas d'accentué. Du reste, dans mes applications qui comportent des écrans LCD et qui sont pilotées par microcontrôleur ou par PIC j'inclue à tous mes programme une procédure qui gère les accentués sur les minuscules, le C cédille et même le G minuscule qui à la base n'est pas élégant. Pour les textes sur la voie série, j'ai tenté plein de codes avec des caractères exprimés en binaire, en décimal etc, mais je n'y suis pas arrivé. Je n'ai pas trouvé non plus comment faire pour provoquer le retour en début de ligne sans le faire suivre d'un passage à la ligne. C'est dommage, car il serait ainsi possible d'afficher en boucle sur une ligne sans voir défiler l'écran à toute vitesse ce qui est très désagréable je trouve. BREF, un seul accentué vous manque ... et les phrases sont dépeuplées. :)

J'ai rien pour essayer ici mais normalement le \code_ascii_du caractère devrait fonctionner. C'est juste un peu lourd de coder une chaîne de caractères comme ça.

Ce n'est pas un problème d'IDE mais du terminal d'origine "processing" qui ne gère pas les accents. J'ai essayé en utilisant un terminal "screen" sous Linux et les accents sont parfaitement gérés sans toucher en rien aux librairies arduino.

Sur ce forum il existe aussi un projet toutes plate-formes pour améliorer l'IDE : http://forum.arduino.cc/index.php?topic=176498.0 Le "terminal" a été entièrement réécrit, ce n'est plus celui de processing, j'ai testé une des toutes premières versions et les accents étaient parfaitement gérés. Il n'y a pas que le terminal qui a été réécrit il y a beaucoup d'autres améliorations. Malgré tout il reste un défaut: les logiciels comme avr-gcc, avrdude etc sont dans la même version que ceux de l'IDE officielle c'est à dire avec des années de retard.

C'est comme tellement ridicule qu'ils ne permettent pas les accents dans les noms de variable, surtout en considerant qu'une fois compilé, ce nom n'existe plus.

Pour l'affichage oui c'est ridicule puisque ce n'est que de l'affichage mais pour les nom de variable ce n'est pas ridicule c'est des normes internationales !

Le code doit être universel. Si tout était permis le jour où tu te retrouverai avec des noms de variables en caractères chinois ou cyriliques on n'aura pas fini de t'entendre râler.

Lol. En éffet, t'as bien raison, je serais probablement le premier à monter aux baricades. Tout fois, je tiens à te remercier. Tu viens de me donner la justification du pourquoi. :)

Personnellement, étant habitué sous Pascal ou en assembleur à utiliser à convenance les accentués, je trouve extrèmement pénalisant de ne pouvoir les utiliser sur les identificateurs. Mais ce n’est qu’un avis personnel. Que la norme qui fasse référence interdise ces caractères n’est pas un avantage à mon sens. Quand à ne pas pouvoir les utiliser sur la ligne série, c’est tout aussi frustrant. Souvent je change le texte, car un affichage sans accentués me choque tellement que je préfère chercher un autre mot pour remplacer. éèàçê NA ! :wink:

nulentout: Que la norme qui fasse référence interdise ces caractères n'est pas un avantage à mon sens.

C'est pour permettre l'échange de code sans être pénalisé par les particularités locales.

Et dans ce cas, pourquoi ne pestez-vous pas que la langue utilisée soit l'anglais ?

Diantre, passez à un langage de programmation basé sur le Français ;)

Bonjour, Pourquoi pas Turtle sur TO7 : http://fr.wikipedia.org/wiki/Logo_%28langage%29 :)

Wow, ou un module Arduino pour WinDev :)

Bonjour,

La langue en informatique c'est l'anglais, et en anglais il n'y a pas d'accents.

Imaginer le merdier si tout les compilo devaient gérer l'UTF-8 (en partant du principe que tout les dév de compilo se mettent d'accord pour utiliser l'UTF-8 par défaut, ce qui est impossible).

Il y a bien la solution "à la python" qui consiste à mettre en entête du fichier source le type d'encodage utilisé. Mais il suffit d'avoir codé une fois en python avec de l'utf-8 dans un fichier source mais pas dans un autre pour comprendre le bourbier infâme que ça génère.

Pour l'affichage sur le port série c'est différent, il suffit simplement de mettre les caractères en unicode dans le source (syntaxe \xAB\xCD, avec ABCD le code unicode du caractère). Après c'est un problème de terminal série. Celui de l'ide Arduino ne supporte que l'encodage US-ASCII 7 bits.

XavierMiller: Diantre, passez à un langage de programmation basé sur le Français ;)

haifger: Wow, ou un module Arduino pour WinDev :)

Si ouinon, non.

Je suis un francophone, donc je suis un résistant. Il n’y a aucune raison valable pour que la langue de l’informatique soit ce langage vague et pourrit

C'est le moniteur série de l'IDE d'Arduino qui est pourri ! Passez à autre chose, et les accents seront bien visibles ;)

Frédéric_Plante: Je suis un francophone, donc je suis un résistant. Il n'y a aucune raison valable pour que la langue de l'informatique soit ce langage vague et pourrit

Voila toute la différence entre des Français qui se croient protégés par 6000 km d'océan et trouvent que truffer le français de mot anglais ça fait "classe" et des Québécois qui eux doivent lutter en permanence pour défendre leur langue qui est aussi la notre.

Désolé la réponse de Xavier est la bonne. Autre choix possible le projet UECIDE http://forum.arduino.cc/index.php?topic=176498.msg1717514#new qui règle le probléme. Seul inconvénient il n'utilise pas les dernières versions des logiciels (avr-gcc, avrdude,...) mais ceux présent dans la version Arduino. Si tu es sous Windows cela ne changera rien, par contre sous Linux tu regressera en terme de versions.

Autre solution : utiliser une interface USB/TTL a quelques € et utiliser sur le PC un logiciel émulateur de terminal.

Bonjour,

J'ai peut-être une solution qui, même si elle est limitée, devrait rendre le service dans pas mal de cas simples. Sous forme de library (pardon : librairie :sweat_smile:) que je posterai ce soir.

Comme vous, j'ai été confronté à la frustration de ne pas pouvoir profiter de toute la richesse de la langue de Molière.

Cette librairie a été écrite pour répondre à mes besoins, dont voici la description :

A la base j'ai de tas de messages en bon français, avec caractères accentués. Des trucs du style :

const char toto[] = "où sont passés mes accents?";

(mettons de côté les considérations liées à l'utilisation de PROGMEM, ce n'est pas le sujet ici)

Depuis l'arduino, je peux envoyer un même message : - sur un terminal série d'un PC (celui de l'IDE Arduino) - sur un écran LCD 2x16 ou 4x20 - dans des pages HTML retournées par un mini serveur web embarqué

Et pas question de renoncer aux caractères accentués.

Se posait alors la question de convertir au bon format le contenu de la RAM contenant le message, avant envoi vers le media de restitution.

De surcroît, mon arduino dialogue avec des systèmes tiers : PC Windows / PC Linux / Android pour lesquels je produis aussi du code, contenant les mêmes messages.

Mon char toto[] et ses frères sont définis dans un fichier unique utilisé par tous mes compilos.

Mais dans le résultat compilé (et donc dans la RAM à l'exécution du programme), ces messages peuvent être stockés dans différents formats, selon l'IDE et/ou le compilo.

Du coup, je voulais aussi que mes fonctions de conversion soient multi-plateformes.

Au final, j'ai fabriqué une fonction qui a en entrée : - un texte en char[] - le format cible souhaité, parmi UTF-8 / UNICODE / ASCII / HTML / suppression des accents et qui délivre un char[] assurant la conversion des caractères accentués dans le format cible.

La fonction s'adapte automatiquement au format de la source, selon ce qu'elle trouve dedans.

Au final cela donne une librairie simple d'utilisation. Par exemple :

void setup()
{
  const char toto[] = "où sont passés mes accents?";
  Serial.begin(9600);
  Serial.println(conversionUnicode(toto)); // Pour affichage sur l'IDE Arduino
}

Evidemment il y a une limite, sinon ce serait trop beau : je ne gère que les 15 caractères accentués utilisés dans les mots valides de la langue française. à â ä ç é è ë ê ï î ô ö û ü ù

Cette librairie n'est pas écrite pour la postérité. Les puristes trouveront probablement qu'elle est incomplète, mais elle a l'avantage d'être simple et de répondre parfaitement à mon besoin. Elle doit pouvoir être complétée avec quelques autres caractères spéciaux, par exemple si votre coeur souffre d'une trop grande distance entre ses voyelles.

a+

Le plus frustrant, c'est quand on exécute cette exemple:

void setup() {

  Serial.begin(9600);

  while (!Serial) {

    ; 

  }

  Serial.println("Table des caracteres ASCII");
}

int Cet_Octet = 33;
void loop() {

  Serial.write(Cet_Octet);
  Serial.print(", dec: ");
  Serial.print(Cet_Octet);
  Serial.print(", hex: ");
  Serial.print(Cet_Octet, HEX);
  Serial.print(", oct: ");
  Serial.print(Cet_Octet, OCT);
  Serial.print(", bin: ");
  Serial.println(Cet_Octet, BIN);
  
  if (Cet_Octet == 255) {
  
    while (true) {
  
      continue;
  
    }
  
  }
  
  Cet_Octet++;

}

Et qu'on se rend compte que l'IDE de Arduino est parfaitement capable d'accentuer, au besoin. Cependant il ne le fait pas correctement.

Ma petite librairie en pièce jointe

Exemple de code vite fait pour afficher sur le terminal de l’IDE Arduino (il mange de l’UNICODE me semble t’il)

#include "Accents.h"

char toto[] = "Caractères accentués";
char complet[] = "àâäçèéêëîïôöùûü";

void setup()
{
  Serial.begin(9600);
  Serial.println(Accents.Transcoder_UNICODE(toto)); //exemple 1
  Accents.Transcoder_UNICODE(complet); //exemple 2
  Serial.println(complet);
}

void loop()
{
}

Accents.h (996 Bytes)

Accents.cpp (16.8 KB)