LOCODUINO

Les chaînes de caractères

Du texte, toujours du texte...

. Par : Thierry

Un peu d’histoire... Depuis toujours, les processeurs, qu’ils soient simples comme les Atmel, ou complexes comme ceux de nos ordinateurs reposent tous sur des octets (des bytes en Anglais). Comment à partir de ces octets qui peuvent prendre n’importe quelle valeur entre 0 et 255 a-t-on pu y stocker des caractères ? Il faut comprendre que les (…)

Retourner à l'article

Vous répondez à :

Bonjour mon problème est inverse. J’ai un croquis qui dépasse les 32256 Octets. Dans celui-ci il y a de stocker "lundi" "mardi" etc et "Janviee" "Février" etc.

Je voudrais créer deux tableaux en Ram pour qu’à l’adresse 1 il y est "lundi" jusqu"à dimanche (soit 8 case de 0 à 7) et un autre avec Janvier jusqu’à Décembre soit de 0 à 12.
Ensuite avec le N° du jour (de 1 à 7) je charge le jour correspondant et de 1 à 12 le mois. J’espère que ca réduiras suffisamment mon croquis car actuellement j’ai environ 1000 "places" dans la Ram. Merci de votre aide.

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

Lien hypertexte

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)

17 Messages

  • Les chaînes de caractères 25 octobre 2015 17:25, par DDEFF

    Bravo Thierry !
    Toujours aussi clair.
    Peux-tu un peu développer le "F" dans Serial.println(F(...)) ?

    Répondre

  • Les chaînes de caractères 27 octobre 2015 16:16, par DDEFF

    Parfait !
    Et ce qu’il y a de bien avec ce genre d’article, c’est qu’on a tout au même endroit.
    Si je me pose une question sur une chaîne de caractères, c’est là que j’irai, au lieu de piocher des bribes à gauche ou a droite.
    Merci

    Répondre

  • Les chaînes de caractères 10 novembre 2015 01:00, par jac56

    Très bon article.
    Un complément proposé :
    il n’est pas aisé de trouver dans la documentation Arduino toutes les informations utiles pour éviter de saturer la mémoire sram (la mémoire de stockage des variables du programme, dont les chaînes de caractères, notamment, très grosses consommatrices de cette mémoire).
    A propos de l’utilisation de la mémoire programme pour stocker des données, voici un (vieux) lien qui donne des informations complémentaires :
    http://www.nongnu.org/avr-libc/user...
    (déclaration et récupération des données en ’progmem’ dans le cas de tableaux de chaînes par exemple, et aussi de tableaux de nombres).
    Il pourrait être agréable de le mettre sous la forme d’un article Locoduino qui mentionnerait conjointement l’utilisation de la fonction freeMemory() qui permets de connaître la taille de sram restant libre. Cette fonction a déjà été citée dans un article, mais il manque peut-être une vue synthétique sur ce sujet assez délicat qui mériterait bien un article à lui tout seul.

    Répondre

  • Les chaînes de caractères 17 avril 2016 19:36, par Eric

    Bonjour,

    J’utilise un shield GSM qui doit envoyer le message suivant :

    "sos ][1.1][2.0][3 ;0"

    Le sms est traité et l’état des capteurs 1 2 et 3 sont inscrits dans une base de données.

    Lors de l’envoi du sms, les ][ se transforme en )(... et l’info n’est pas traitée

    Quelqu’un peut -il m’aider ???
    Merci

    Répondre

  • Les chaînes de caractères 18 avril 2016 10:49, par Jean-Luc

    Les crochets ne font pas partie du jeu de caractères des SMS. Il faut changer votre protocole. Quel est le rapport avec le modélisme ferroviaire ? Les forum de arduino.cc ne seraient-il pas plus adaptés pour ce genre de demande ?

    Répondre

  • Les chaînes de caractères 13 avril 2017 19:19, par PIVAR

    Merci , vos articles sont bien (et agréables à lire , même si on saisit pas tout du premier coup) ; j’ai vu dans la doc arduino que les chaines de caractère "string" étaient utilisables , un peu comme celles des Vb , python ou b4x ; ont-elles la même contrainte de zero final que les chaines de caractères ?

    Répondre

  • Les chaînes de caractères 21 avril 2017 21:10, par Thierry

    Bonjour. Je n’ai pas utilisé cette classe String maintenant présente par défaut avec l’IDE actuel. La contrainte du caractère de fin de chaîne existe toujours puisqu’en interne, la classe utilise un banal char * pour stocker son texte. Mais elle est complètement masquée par la classe qui se débrouille pour gérer ce zéro. Elle utilise en plus un entier qui donne la longueur de la chaîne.

    Répondre

  • Les chaînes de caractères 28 avril 2017 00:57, par pivar

    Bonjour , j’ai pu regarder les echanges de string pc-arduino ; ce que j’ai vu : lorsque le pc envoie une string en serial , la string se retrouve avec un zero de fin dans arduino ; je teste la fin de message sur ce zero
    lorsque arduino envoie un message au pc , la string n’a rien en fin si elle est envoyée avec un Serial.print et elle a les caracteres 10 et 13 avec un Serial .println ; c’est normal , ce sont les caractères de retour ligne ; comme il y a plus de memoire dispo dans les dernières cartes , string peut parfois être plus commode

    Répondre

  • Les chaînes de caractères 5 décembre 2017 15:26, par Frangville

    Bonjour je voudrais savoir comment obtenir la longueur d’une variable en char* (char* BSF[]= "Boissons","Sandwichs","Friandises","Chips" ;).
    Merci d’avance.

    Répondre

  • Les chaînes de caractères 5 décembre 2017 15:43, par Thierry

    Bonjour.
    Dans votre exemple, vous avez quatre chaînes de caractères... Pour obtenir la longueur de l’une d’entre elles vous devez utiliser la fonction strlen() :

    char* BSF[]= { "Boissons","Sandwichs","Friandises","Chips" };
    
    void setup() 
    {
      int longueur = strlen(BSF[2]);
    }
    
    void loop() 
    {
      // put your main code here, to run repeatedly:
    
    }

    Répondre

  • Les chaînes de caractères 17 avril 2018 17:31, par Bobillier Eric

    Bonjour.
    Merci pour cet article très instructif (comme tout le site).
    J’aimerais comprendre une chose concernant les chaines et l’objet Chaine en particulier.
    Il est possible dans Arduino de déclarer une chaine comme suit : String(Toto) et de la manipuler avec les méthodes de la classe string et surtout de lui associer une valeur. Cependant à aucun moment il n’est fait référence à une quelconque taille comme c’est le cas avec la déclaration des tableaux de char. Cela voudrait-il dire que le compilateur réserve automatiquement et de manière implicite une place définit en mémoire (genre 256 bytes). De plus, il existe une méthode reserve() dans la classe String, mais elle n’est pas systématiquement utilisée pour définir la taille mémoire réservée pour la chaine dans la plupart des exemples, et donc quelle est son utilité. Merci par avance pour vos éclaircissements.

    Voir en ligne : Reserve()

    Répondre

  • Bonjour mon problème est inverse. J’ai un croquis qui dépasse les 32256 Octets. Dans celui-ci il y a de stocker "lundi" "mardi" etc et "Janviee" "Février" etc.

    Je voudrais créer deux tableaux en Ram pour qu’à l’adresse 1 il y est "lundi" jusqu"à dimanche (soit 8 case de 0 à 7) et un autre avec Janvier jusqu’à Décembre soit de 0 à 12.
    Ensuite avec le N° du jour (de 1 à 7) je charge le jour correspondant et de 1 à 12 le mois. J’espère que ca réduiras suffisamment mon croquis car actuellement j’ai environ 1000 "places" dans la Ram. Merci de votre aide.

    Répondre

Rubrique Programmation

Les derniers articles

Les articles les plus lus