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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    Janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 147
    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
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    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 confirmé
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    Janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 147
    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
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    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 confirmé
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    Janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 147
    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
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    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);
    }

+ 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