Go Down

Topic: Problème de variable (Read 43 times) previous topic - next topic

Ronfred

Bonjour à tous,
je fais ce post par rapport à mon problème avec les nombres et les calculs sur mon code.

J'explique mon code (juste une partie pour expliquer le problème).
Je veux faire un sorte de jeu mathématique, une suite d'opération pour arriver à un résultat.
La seul action possible ici est l'addition (action "1").
Mais c'est là où vient le problème... Les valeurs ne sont jamais les bonnes !
Quand j'arrive dans le "if" de l'addition, Le Debut vaut 0 ! (j'imagine qu'il prend "int Debut = 0").
Mais après ça... La valeur que je voulais mettre à additionné avec le Debut prend une valeur aléatoire !
Vous pouvez tester directement le code pour que vous vous en rendiez compte.

Apparemment c'est un bug de compilateur datant de 2008 qui créé ce problème.

Je me retrouve bloqué avec des valeurs qui changent sans arrêt et pas des valeurs fixes...
Et non je ne peux pas aller le faire sur python (ça aurait été trop simple).

Merci de votre aide d'avance.



Code: [Select]
int Debut;
int Result;
int val = 0;
char choix[8];
char tours = 0;
byte Action = 0;
byte nbr = 0;

void setup() {
  Serial.begin(9600);
  randomSeed(analogRead(0));
}

void loop() {
  Result = random(101,999);
  Debut = random(1,100);
  Serial.print("Nombre à retrouver :");
  Serial.println(Result);
  Serial.print("Votre nombre actuel :");
  Serial.println(Debut);
  memset(choix, '\0', 9);
  Action = 0;
  tours = tours + 1;

//---------------------------------------
  Serial.println("Saisissez une action :");
  while (Action == 0){
    byte x=0;
    delay(10);
    while (Serial.available()>0) {
      choix[x]=Serial.read();
      delay(10);
      x++;
    }
    if (choix[0] > 0) {
      Action = atoi(choix);
    }
  }
 
//-----------------------------------------

  if (Action == 1){
    Serial.print("le debut vaut :");
    Serial.println(Debut);
    val = 0;
    Serial.println("Saisissez un nombre à additionné entre 1 et 9 :");
    while (val == 0) {
      while (Serial.available()>0) {
        val = Serial.read();
      }
   }
    Serial.print("le debut vaut :");
    Serial.println(Debut);
    Serial.print("la valeur vaut :");
    Serial.println(val);
    Debut = Debut + val;
    Serial.print("le debut vaut :");
    Serial.println(Debut);
  }
}

kamill

#1
Jun 20, 2019, 05:14 pm Last Edit: Jun 20, 2019, 05:42 pm by kamill
Bonjour,

Il y a un problème ici
        val = Serial.read();
Tu retrouves dans val le code ASCII du caractère envoyé.

Je suppose que tu veux la valeur décimale. Un des façons de faire est
        val = Serial.read()-'0';

De plus les valeurs de Result et Debut sont réinitialisés avec random à chaque entrée dans la loop()

Ronfred

Bonjour,

Il y a un problème ici
        val = Serial.read();
Tu retrouves dans val le code ASCII du caractère envoyé.

Je suppose que tu veux la valeur décimale. Un des façons de faire est
        val = Serial.read()-'0';
Merci c'est un problème réglé.

De plus les valeurs de Result et Debut sont réinitialisés avec random à chaque entrée dans la loop()
C'est normal, j'ai essayé de le mettre dans le void setup(), évidemment ca fait la même erreur.
Et surtout j'ai fais exprès de le mettre dans le void loop pour le tester si c'est le seul moyen de trouver une solution, car au pire, je ferai une énorme boucle while pour le programme entier après les valeurs randoms de Debut et Result.

Go Up