Probléme de boucle

Bonjour,

Je suis sur un projet qui consiste à remplacer un boiier electronique ou on marquait le nombre de tours qu'on voulait qu le moteur fasse et ca coupait le moteur au bon moment.

J'ai presque tout terminé mais j'ai juste un petit problème pour la valeur max qu'on peut saisir ; je m'en explique :
En fait j'ai 2 tableaux :
1 qui stocke des valeurs (en autre le nombre de tours voulus)
l'autre qui stocke la taille max de la valeur pour chaque valeur du tableau

const int NbrItemsMenu = 3;
const char* ItemMenu[NbrItemsMenu] = {"RPM", "PWM", "Mode auto"};
const char* TailleMaxValeur[NbrItemsMenu] = {"800", "100", "2"}; //valeur max pour les valeurs ValeurItemMenu
int ValeurItemMenu[NbrItemsMenu] = {16, 88, 1};

Je me suis fait un menu controlé avec un codeur rotatif tout fonctionne mais en fait j'arrive quand meme à incrémenter ma valeur malgré ma condition if qui dit qu'on incrémente la valeur uniquement si elle est inférieur à la valeur max stockée dans le second tableau :

     toto = TailleMaxValeur[NumMenuTbx];
  
if ( ValeurItemMenu[NumMenuTbx] < TailleMaxValeur[NumMenuTbx] ) {
          if (Debug = 1) {
            Serial.println("dans le if");

            Serial.print("TailleMaxValeur[NumMenuTbx]");
            Serial.println(TailleMaxValeur[NumMenuTbx]);

          }
          ValeurItemMenu[NumMenuTbx] = ValeurItemMenu[NumMenuTbx] + 1;
        }

J'ai fait des println pour essayer de trouver le probméme mais sans succés.
Concrètement j'arrive à incrémenter ma valeur ValeurItemMenu malgré qu'elle soit égale ou dépasse ma valeur ValeurItemMenuMax.
Avec les println je vois bien que ValeurItemMenuMax est bonne , par contre si je remplace physiquement dans mon if ValeurItemMenuMax par 20 là ça fonctionne bien, je ne peux pas aller au delà de 20.
Aprés avoir tourné mon codeur rotatif la console me renvoie :
ValeurItemMenu = 4 car j'ai réussi à l'incrémenter malgré ma condition

dans le if 
TailleMaxValeur[NumMenuTbx]: 3 
toto : 447 
ValeurItemMenu[NumMenuTbx]4 
TailleMaxValeur[NumMenuTbx]3

Quant à la valeur toto, ça me donne un chiffre qui ne sort de je ne sais ou (c'était juste pour le debug)
Si j'essaie le code suivant :

toto = TailleMaxValeur[NumMenuTbx];
        Serial.print("toto: ");
        Serial.println(toto);
        if ( ValeurItemMenu[NumMenuTbx] < toto) {
          if (Debug = 1) {
            Serial.println("dans le if");

            Serial.print("TailleMaxValeur[NumMenuTbx]: ");
            Serial.println(TailleMaxValeur[NumMenuTbx]);
          }
          ValeurItemMenu[NumMenuTbx] = ValeurItemMenu[NumMenuTbx] + 1;
        }

ca me renvoi :

ModeReglage :1 
Rotary position toto: 447 
dans le if 
TailleMaxValeur[NumMenuTbx]3 
toto : 447 
ValeurItemMenu[NumMenuTbx]2 
TailleMaxValeur[NumMenuTbx]3

Je peux joindre le code complet mais il y a beaucoup de lignes pour juste ce petit 'bug"
j'ai une carte arduino nano et la version de l'ide est 1.8.13 sous linux
Merci d'avance ^^

Bon ben en fait j'ai trouvé mon tableau il fallait le mettre en const int au lieu de char ....

Résolu

          if (Debug = 1) {attention les tests c'est ==

sinon effectivement avec const char* TailleMaxValeur[NbrItemsMenu] = {"800", "100", "2"}; //valeur max pour les valeurs ValeurItemMenuvous déclarez des chaînes de caractères (en pratique même des pointeurs sur ces chaînes), donc on ne peut pas faire des maths directement sur les valeurs représentées, si vous faites des operations vous modifiez les pointeurs....

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.