Extraire une information d'une variable dans un menu pour effectuer une action
Bonjour,
je suis débutant en c++ et j'aimerais extraire une valeur que j'ai mise dans une variable "numéro" où on peut choisir le numéro 1, 2 ou 3 grâce à un bouton poussoir.
Je fais valider le choix dans un deuxième menu de l'écran LCD à l'aide d'un autre bouton poussoir.
Le problème étant que je voudrais prendre le chiffre dans la variable "numéro" donc soit 1,2, 3 une fois qu'il a été validé et faire allumer 1 LED différente en fonction du numéro.
Je ne sais pas si cela est comprensible car moi je travaille dessus mais j'aimerais bien de l'aide.
merci ;)
voici un bout du code
Code:
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 28 29 30 31 32 33 34 35 36 37 38 39
|
case 1:
// message pour selectionner
lcd.setCursor(0,0);
lcd.print("Selectionner un");
lcd.setCursor(0,1);
lcd.print("numero:");
lcd.setCursor(9,1);
{numero ++;}
delay(100);
//permet de ne pas dépasser 3
if(numero >3)
{numero =1;}
{lcd.print(numero);}
break;
case 2:
//message validation
lcd.setCursor(0, 0);
lcd.print("vous avez fais");
lcd.setCursor(0, 1);
lcd.print("le choix:");
lcd.setCursor(14, 1);
lcd.print(numero);
break;}
// partie qui ne fonctionne pas
if(numero =1)
{digitalWrite(led1, HIGH);}
if(numero =2)
{digitalWrite(led2,HIGH);}
if(numero =3)
{digitalWrite(led3, HIGH);}
} |
Couche code ou couche compilateur ?
Bonsoir,
La norme ne dit pas que l'expression soit convertie en booléen mais qu'elle soit convertible. C'est un potentiel qui garantit une aptitude de levée de doute pour le test et non un besoin de conversion explicite. Par exemple, un flottant NaN laisse une ambiguïté élevée qui ne satisfait pas a priori au critère de convertibilité.
C'est la raison pour laquelle l'usage de la fonction coucou, même en inline, sera moins efficace que if (random(0, 101) < 30) { ... }. En effet coucou() force le passage par une évaluation booléenne inutile. Le code initial revient à écrire (en supposant un inline) : if (bool(random(0, 101) < 30) == true) { ... }. Il va falloir pousser loin les curseurs d'optimisation et croiser les doigts pour espérer que le compilateur corrige cela.
Un if a toujours besoin d'une comparaison pour déclencher son saut conditionnel. Si elle est absente, il opère une comparaison == 0 y compris pour un booléen. En effet pour faire un saut conditionnel il faut évaluer une condition qui va prépositionner les flags pour que le saut ait lieu ou pas. C'est dans le choix des flags du saut conditionnel que se trouverait la variable booléenne virtuelle.
Le deuxième exemple utilisera le fait qu'une comparaison n'est qu'une soustraction dont on n'utilise pas le résultat mais seulement les flags. Pour dépasser la taille native d'un CPU on utilisera une soustraction avec retenue (ou une comparaison avec retenue si elle existe) répétée 4 fois sur les différents octets des 32 bits. Puis le saut conditionnel aura lieu en tenant compte des flags résultants (les mêmes qui seraient utiles si on avait besoin d'un variable booléenne).
L'opérateur de comparaison utilisé par le if associe intimement une comparaison asm (soustraction sans valeur de destination) et la prise en compte de différents flags (selon l'opérateur de comparaison souhaité) au sein même du saut conditionnel (jcc). C'est cette intrication qui rend au mieux virtuelle toute variable booléenne intermédiaire.
On peut faire abstraction du fonctionnement réel des compilateurs et écrire sans état d'âme "si c'est vrai..." mais il est alors préférable de ne pas faire référence à une hypothétique variable intermédiaire qui serait générée par le compilateur. C'est tout l'objet de ma remarque initiale.
Un détail pour la route. Le saut conditionnel se branche après la fin du bloc "then" c'est à dire au début du bloc "else" s'il existe. Les flags utilisés représentent donc une condition inverse de celle écrite en code source (par exemple jne- jump if non equal - pour un "==".
Un exemple pour essayer d'illustrer : Si le seau déborde je me mouille les pieds. Cette phrase ne nécessite pas d'être réécrite ainsi : Est-ce que le seau déborde ? Si oui je me mouille les pieds.
Je vais me sécher.
Salutations