[RESOLU]Fonction "Switch case" et variable

Bonjour à tous,
Je vous ai en son temps, sollicité pour ce problème :

Celui-ci est maintenant résolu, le PCB est gravé et fonctionne parfaitement.
Je reviens donc à la programmation.
Le programme fonctionne, mais je vaudrais améliorer sa lisibilité .
Je me sers de la fonction "switch case", avec une trentaine de choix possible.
Pour le moment, je n'arrive à faire fonctionner cette fonction qu'avec une variable de type "char" (1 seul caractère).
Or, j'aimerai, pour la lisibilité, me servir de variable plus explicite (du style ouvrir, ou fermer, ou bien tester, etc).
Et bien , lorsque je déclare ma variable en "string" cela ne fonctionne pas.

Message d'erreur ci-dessous

NivelUp_06.ino: In function 'void loop()':
NivelUp_06:467: error: invalid conversion from 'int' to 'const char*'
NivelUp_06:467: error: initializing argument 1 of 'String& String::operator=(const char*)'
NivelUp_06:475: error: switch quantity not an integer

Une amorce de solution serait la bienvenue
Cordialement.
JP

Salut,

Peux-tu poster la portion de code incriminée ?

Switch case ne fonctionne qu'avec une variable numérique donc de ce coté pas d'évolution possible.
Par contre pour coder de manière plus lisible rien ne t'empêche de déclarer un enum pour définir tes états et ensuite les utiliser dans les case.

// déclaration des cas possibles implicitement le premier vaut zéro mais on peut affecter la valeur que l'on veut à n'importe lequel avec un =
enum cas={E_INIT, E_CAS1, E_CAS2, E_CAS3, E_CAS4, E_CAS5};

......

     switch(mavariable){
       case E_INIT:

       case E_CAS1:

       case E_CAS2:

       case E_CAS3:

       case E_CAS4:

      default :
    }

Bonjour,
OK, merci de vos réponses.
En complément :
Le projet est en deux parties : un programme sur une Arduino Mega 2560 et un programme sur un Pocket PC.
Le PPC transmet des ordre à la Méga, qui elle lui renvoi des infos.
La solution (enum) que vous me présentez résoudrait une partie de mes interrogations coté Arduino.
Mais, il me faudra toujours envoyer mes ordres provenant du PPC à l'aide d'une variable numérique puisque l'Arduino ne comprends que cela.
Je vais quand même garder cette info et verrais par la suite si je l'emploi ou non.
Ainsi que je l'ai dis, globalement le programme fonctionne.
Mais dans le cadre d'une optimisation du code (et donc de sa beauté), j'aurais vraisemblablement d'autres questions à formuler.
Par exemple, je ne connaissais pas la fonction (enum) qui a priori n'apparait pas dans les réferences arduino
http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.ReferenceMaxi
Encore merci
JP

Par exemple, je ne connaissais pas la fonction (enum) qui a priori n'apparait pas dans les réferences arduino

enum est un mot reservé (keyword) du C standard
http://c.developpez.com/cours/bernard-cassagne/node92.php

L'enum peut aussi bien être utilisé dans le logiciel coté Pocket PC (si tu développes en C sur le pocket)

enum alloue automatiquement un numéro à chacun des items définis dans la liste. Si on ne précise pas de valeur le premier item vaut 0, le suivant 1 et ainsi de suite. Si on précise une valeur pour un élément cette valeur lui est affectée et les items déclarés après prendront les numéros suivants. On peut voir l'enum comme une suite de #define qui seraient pris en compte automatiquement par le pré-processeur. Dans un même enum, deux items peuvent porter le même numéro par contre on ne peut pas avoir 2 items ayant le même nom dans un même enum.

Comme indiqué, l'enum n'est qu'une façon de rendre le code plus lisible en attribuant un nom en clair dans ton code a une valeur.

Sauf que par défaut, les valeurs ne sont pas forcément identique entre 2 compilateurs (en pratique c'est plutot identique).

Donc pour assurer l'interopérabilité entre ton code C sur PocketPC et ton Arduino, tu peux avoir un fichier H commun, utilisé dans les 2 codes et rédigé de la façon suivante :

enum cas={  E_INIT = 0,   E_CAS1, E_CAS2, E_CAS3, E_CAS4, E_CAS5};

Cela impose que la 1ere valeur soit à 0 et que les suivantes sont incrémentées de 1 en 1

En faisant #include de ce fichier dans ton code PocketPC et dans ton code Arduino tu t'assures l'interopérabilité des valeurs.

Reste ensuite a t'assurer que les messages soit bien compris entre les 2....

Pour le coté PPC, je programme avec WinDev qui permet de décliner l'application sur plusieurs matériel en ne faisant que peu de modif de code.
L'appli cote PPC sera par la suite implanté aussi sur de l'Android.
Mais le langage est un langage bien particulier à Winev.
Donc ça restera comme ça car ça n’empêche pas mon programme de fonctionner.
Je clos ce sujet et en ouvre un autre pour une autre question
JP