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

C Discussion :

découper une chaine et placer chaque carractère dans un tableau


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 125
    Par défaut découper une chaine et placer chaque carractère dans un tableau
    Bonjour,

    Alors voilà mon problème: je programme en c sur un module assez atypique (module rovin) et je suis en train d'essayer de coder la gestion d'un afficheur LCD.

    Si je veux écrire un mot sur l'afficheur je doit envoyer les carratères les un après les autres.

    Pour l'instant j'ai écrit une fonction bien bourrin qui fonctionne mais qui est très peu pratique à utiliser. Ça donne ç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
    15
    16
    17
    18
    19
    20
    21
    22
    void MotToLCD(unsigned char L1, unsigned char L2, unsigned char L3, unsigned char L4, unsigned char L5, unsigned char L6, unsigned char L7, unsigned char L8, unsigned char L9, unsigned char L10, unsigned char L11, unsigned char L12, unsigned char L13, unsigned char L14, unsigned char L15, unsigned char L16)
    {
    I2cStart(1);
    I2cOut(1,EcranADR);
    I2COut(1,L1);
    I2COut(1,L2);
    I2COut(1,L3);
    I2COut(1,L4);
    I2COut(1,L5);
    I2COut(1,L6);
    I2COut(1,L7);
    I2COut(1,L8);
    I2COut(1,L9);
    I2COut(1,L10);
    I2COut(1,L11);
    I2COut(1,L12);
    I2COut(1,L13);
    I2COut(1,L14);
    I2COut(1,L15);
    I2COut(1,L16);
    I2CStop(1);
    }
    et j'utilise cette horreur ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MotToLCD('B','o','n','j','o','u','r',' ','a',' ','t','o','u','s','!',' ');
    Ce qui est vraiment pas pratique du tout.

    Au final j'aimerais donc avoir un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MotToLCD('Bonjour a tous!');
    Je me suis dit que j'allais placer tout les carractères dans un tableau de 16 lignes (mon afficheur ne peut afficher que 16 carractères). puis envoyer tout ça via une boucle. J'ai donc bricoler un programme de test qui fonctionne bien:

    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
     
    TableLCD[0] = 'c';
    TableLCD[1] = 'o';
    TableLCD[2] = 'u';
    TableLCD[3] = 'c';
    TableLCD[4] = 'o';
    TableLCD[5] = 'u';
    x=0;
     
    I2cStart(1);
    I2cOut(1,EcranADR);
    for (x=0; x<=15; x++)
    {
    I2cOut(1,TableLCD[x]);
    }
    I2CStop(1);
    Je sens que je suis sur la bonne piste mais je n'arrive pas à trouver comment placer une chaine dans ce tableau. Une Idée ?

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    bonjour,
    Tu es, en effet, très proche de la solution.

    Connais-tu la différence entre un tableau de caractères et une chaîne de caractères en C ?
    Sais-tu convertir un char en un unsigned char ?
    Une fois tout cela connu tu écrirais :
    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
    void MotToLCD( const char msg[] )
    {
       int x;
     
       I2cStart(1);
       I2cOut(1,EcranADR);
       for ( x=0 ; x<=15 && msg[x] ; x++ )
       {
          I2cOut( 1 , (unsigned char)msg[x] );
       }
       for ( ; x<=15 ; x++ ) // si msg trop court completer par des espaces
       {
          I2cOut( 1 , (unsigned char)' ' );
       }
       I2CStop( 1 );
    }
     
    // Appel de la fonction
    MotToLCD( "Bonjour a tous!" );

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 125
    Par défaut
    Merci, j'ai testé le code et après une modification (
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void MotToLCD( const char msg[] )
    transformé en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void MotToLCD(char msg[] )
    ) ça marche.
    Par contre je suis un peu perdu... pourquoi convertir un char en un unsigned char permet de débloquer la situation ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Un char peut tout à fait être converti en unsigned char implicitement ou explicitement.
    Une chaîne de caractère c'est un tableau de char, pour lequel la conversion en tableau d'unsigned char doit être explicite.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 125
    Par défaut
    Merci, j'ai mis le temps mais j'ai compris.

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/03/2012, 06h33
  2. Réponses: 6
    Dernier message: 05/11/2010, 23h15
  3. Réponses: 9
    Dernier message: 26/06/2007, 17h58
  4. découper un nombre et placer ses chiffres dans un tableau
    Par NicoO_O dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 10/04/2007, 14h09
  5. [Débutant][Token] découper une chaine
    Par _Eric_ dans le forum Langage
    Réponses: 14
    Dernier message: 06/07/2004, 10h36

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