IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Manipulation des chaines de caractère Arduino


Sujet :

Arduino

  1. #1
    Membre régulier
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    Janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité développement loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 147
    Points : 85
    Points
    85
    Par défaut Manipulation des chaines de caractère Arduino
    Bonjour,
    je débute vraiment sur Arduino (de bonnes bases en langage C quand meme)
    j'essaie de créer une chaine de caractère comprenant une chaine + une variable
    avec VirtualWire je voudrais que ma carte réceptrice reçoive par exemple

    le chiffre est 15
    le chiffre est 16

    ce que j'aimerais savoir faire, c'est modifier une chaine et l'utiliser ensuite en la transmettant ou autre...
    je joins ci dessous le bout de code que j'ai modifié 20 fois et qui ne marche pas
    Merci de votre aide


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    #include <VirtualWire.h> // inclusion de la librairie VirtualWire
     
     
    char *msg = "28790658"; // Tableau qui contient notre message
    int chiffre = 0;
     //Chiffres de 0-9 (les caractères ABC... sont transmis en code A=65,...)
     
    void setup() // Fonction setup()
    {
        Serial.begin(9600); // Initialisation du port série pour avoir un retour sur le serial monitor
        Serial.println("Tuto VirtualWire"); // Petit message de bienvenue
     
        vw_setup(2000);     // initialisation de la librairie VirtualWire à 2000 bauds (note: je n'utilise pas la broche PTT)
    }
     
    void loop() // Fonction loop()
    {
      chiffre++;
     
        Serial.print("le chiffre est : "); // On signale le début de l'envoi
        sprintf(msg, "%i", chiffre);
        vw_send((uint8_t *)msg, strlen(msg)); // On envoie le message 
        vw_wait_tx(); // On attend la fin de l'envoi
        Serial.println(chiffre);
        Serial.println("Done ! "); // On signal la fin de l'envoi
        delay(2000); // Et on attend 1s pour pas flooder
    }

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *msg = "28790658"; // Tableau qui contient notre message
    Le commentaire est faux.

    Cela ne crée pas de tableau. Cela crée un pointeur qui pointe vers une chaine de caractères. Comme il s'agit d'une string litteral, il est très probable que cette chaine soit stockée en flash. Ton pointeur pointe donc vers une zone non modifiable. Sur Arduino, il est possible que tenter de modifier cette zone soit sans effet ; sur PC, tu te chopperais sans doute une erreur de segmentation. gcc possède un warning pour prévenir d'un code qui pourrait générer un tel problème : https://gradot.wordpress.com/2013/05...trings-de-gcc/

    Pour régler ton problème, il faut que tu déclares un vrai tableau, qui réservera un espace en RAM, et qui sera donc modifiable.

  3. #3
    Membre régulier
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    Janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité développement loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 147
    Points : 85
    Points
    85
    Par défaut
    Bonjour et merci Bktero,
    j'ai remplacé la ligne par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char msg[] = "28790658"; // Tableau qui contient notre message
    mais ca ne marche toujours pas
    pourrais tu m'aider davantage à comprendre s'il te plait
    merci beaucoup

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Ma boule de cristal un peu oxydée, désolé. Quand tu dis "ça marche" pas, qu'est ce que cela veut dire ? Le code ne compile pas ? Ca n'affiche pas ce que tu veux ? Dans ce cas, qu'est ce que ça affiche ?

  5. #5
    Membre régulier
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    Janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité développement loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 147
    Points : 85
    Points
    85
    Par défaut
    pardonne moi Bktero, étant moi même connecté à mes 2 neurones, j'ai cru que tu y avais accès toi aussi (à mes 2 neurones)
    cela compile et téléverse sans problème, mais dans le programme ci dessus en ayant remplacé la déclaration du pointeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *msg = "28790658"; // Tableau qui contient notre message
    par la déclaration de variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *msg = "28790658"; // Tableau qui contient notre message
    la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf(msg, "%i", chiffre);
    ne transforme pas ma variable 28790658 en 287906581 (en supposant que chiffre soit égal à 1)
    merci de ton aide

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Et c'est normal !

    Regarde ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>
     
    int main()
    {
    	int chiffre = 1;
    	char msg[] = "this is a message";
     
    	sprintf(msg, "%i", chiffre);
    	puts(msg);
     
    	printf(msg, "%i", chiffre);
    }
    Il affiche :
    1
    1
    sprintf() fait le même travail que printf() mais place le résultat dans la chaine passée en paramètre au lieu de l'écrire sur stdout.

    Je ne sais pas trop ce que tu souhaites faire, mais tu peux faire quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <stdio.h>
     
    int main()
    {
    	int chiffre = 1;
    	char msg[] = "28790658x";
     
    	sprintf(msg, "%s%i", "28790658", chiffre);
    	puts(msg);
     
     
    	sprintf(msg, "%i", 28790658 * 10 + chiffre);
    	puts(msg);
    }
    ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <stdio.h>
     
    const char* msg = "28790658";
     
    int main()
    {
    	int chiffre = 1;
    	char buffer[10] = 0; // taille a ajuster
     
    	sprintf(buffer, "%i", chiffre);
     
    	send(msg);
    	send(buffer);
    }

  7. #7
    Membre régulier
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    Janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité développement loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 147
    Points : 85
    Points
    85
    Par défaut
    merci beaucoup,
    il y a quelque chose qui m'intrigue, c'est que j'ai l'impression que les codes que tu me donne sont en C++ et moi je parle de langage Arduino, ce crois savoir que c'est très proche, mais pas rigoureusement identique...
    ????
    Merci pour ton aide et ta patience

  8. #8
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Le "langage" Arduino est du C++.

    Ton main est remplacé par setup() et loop() et tu as des fonctions spécifiques au microcontrôleur : lecture, écriture et configuration des voies entre autres.

  9. #9
    Membre régulier
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    Janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité développement loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 147
    Points : 85
    Points
    85
    Par défaut
    ah bon !
    Dommage pour moi, j'étais épaté par la simplicité du langage arduino, et j'ai déjà pratiqué le C mais pas le C++
    d'accord, et aussi merci beaucoup pour les cours et tutoriels pour apprendre Arduino .

  10. #10
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    C'est simple car tu as de nombreuses bibliothèques de fonctions. Puisque tu l'utilises, regarde le contenu du fichier VirtualWire.h (ouvre le en lecture seule).

  11. #11
    Membre régulier
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    Janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité développement loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 147
    Points : 85
    Points
    85
    Par défaut
    merci à vous 2 de m'avoir aidé, Ca y est ! j'ai (enfin) compris.
    je vais marquer le sujet comme résolu, mais avant juste une question :
    si je mets du code CPP ca marche à tous les coups ou pas (j'ai un livre de cours pour apprendre le C++ que je n'ai pas travaillé, mais si cela marche à 100% sur l'Arduino va vaudrait peut-être le coup que je m'y mette !
    Merci encore

  12. #12
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Tu peux créer tes classes et tes fonctions. Avec l'IDE Arduino tu peux avoir un projet sur plusieurs fichiers.
    Par contre, n'oublie pas que le code compilé est limité en taille.

    Mais documente toi sur ce que tu peux et ne pas faire avec un Arduino :
    https://www.arduino.cc/
    http://www.arduino.org/

  13. #13
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Les codes que je t'ai donné sont même du C en fait. N'ayant jamais touché à Arduino je ne pourrais pas te dire clairement ce que tu ne pas faire avec

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Manipulation des chaines de caractères
    Par Chris L' Arabis dans le forum Langage
    Réponses: 5
    Dernier message: 11/06/2014, 17h31
  2. [WD17] Manipuler des chaines de caractères Arabe
    Par nouyanouya dans le forum WinDev
    Réponses: 7
    Dernier message: 22/11/2013, 12h35
  3. Manipulation des chaines de caractères
    Par Dominique49 dans le forum Langage
    Réponses: 2
    Dernier message: 05/10/2011, 00h05
  4. Manipuler des chaines de caractères
    Par niuniuk36 dans le forum SQL
    Réponses: 4
    Dernier message: 15/08/2011, 12h31
  5. Manipulation des chaines de caractères en c
    Par developppez dans le forum C
    Réponses: 8
    Dernier message: 29/04/2007, 13h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo