[RESOLU] Problème de millis() dans mon jeu "Nombre Mystère"

Bonjour,
j'essaie de créer un petit jeu "Nombre mystère" mais je me retrouve dans une impasse .. j'ai un souci concernant mes millis(), je ne comprends pas pourquoi dans ma fonction "void introduction()" mon code n'affiche que le premier texte "Bienvenue" et ne rentre pas dans le second IF pour afficher le reste.

[code]
// Déclaration pour la Millis
unsigned long previousMillis;
unsigned long currentMillis;
const long intervalBienvenue = 5000;
const long intervalDifficulte = 1000;
const long intervalInformation = 1500;
const long intervalDebut = 2000;

// Déclaration du tableau
int tableau[3];

void setup()
{
  // Déclaration des pins correspondant aux boutons
  pinMode(pinButton30, INPUT);
  pinMode(pinButton31, INPUT);
  pinMode(pinButton32, INPUT);
  pinMode(pinButton33, INPUT);
  pinMode(pinButton34, INPUT);
  pinMode(pinButton35, INPUT);
  pinMode(pinButton36, INPUT);
  pinMode(pinButton37, INPUT);
  pinMode(pinButton38, INPUT);
  pinMode(pinButton39, INPUT);
  pinMode(pinButtonEnter, INPUT);
  pinMode(pinButtonDelete, INPUT);
  pinMode(pinButtonStart, INPUT);

  currentButtonState0 = digitalRead(pinButton30);
  currentButtonState1 = digitalRead(pinButton31);
  currentButtonState2 = digitalRead(pinButton32);
  currentButtonState3 = digitalRead(pinButton33);
  currentButtonState4 = digitalRead(pinButton34);
  currentButtonState5 = digitalRead(pinButton35);
  currentButtonState6 = digitalRead(pinButton36);
  currentButtonState7 = digitalRead(pinButton37);
  currentButtonState8 = digitalRead(pinButton38);
  currentButtonState9 = digitalRead(pinButton39);
  currentButtonStateEnter = digitalRead(pinButtonEnter);
  currentButtonStateDelete = digitalRead(pinButtonDelete);
  currentButtonStateStart = digitalRead(pinButtonStart);

  // Ce qui va être affiché à l'écran
  tft.begin(); // Initialisation de l'écran
  tft.fillScreen(BLACK);
  tft.setCursor(0, 5);
  tft.setTextColor(WHITE);
  tft.setTextSize(1);
  tft.println("Appuyez sur START");

  Serial.begin(9600);
  Serial.println("begin");
}

void introduction()
{

  if (currentMillis - previousMillis >= intervalBienvenue)
  {
    previousMillis = currentMillis;
    tft.fillScreen(BLACK);      // Couleur du fond d'écran
    tft.setCursor(0, 5);        // Position du texte, (0,0) en haut à gauche
    tft.setTextColor(WHITE);    // Couleur du texte
    tft.setTextSize(1);         // Taille du texte
    tft.println("Bienvenue !"); // Message à afficher sur l'écran
    Serial.println(previousMillis);


    if (currentMillis - previousMillis >= intervalDifficulte)
    {
      previousMillis = currentMillis;
      tft.fillScreen(BLACK);
      tft.setCursor(0, 5);
      tft.setTextColor(WHITE);
      tft.setTextSize(1);
      tft.println("Votre mode de\ndifficulte est -LEVEL-");


      if (currentMillis - previousMillis >= intervalInformation)
      {
        previousMillis = currentMillis;
        tft.fillScreen(BLACK);
        tft.setCursor(0, 5);
        tft.println("Nombre entre\n1 et -NNNN-\n");
        tft.println("Vous avez");
        tft.println("X coups");
        tft.println("T secondes");


        if (currentMillis - previousMillis >= intervalDebut)
        {
          previousMillis = currentMillis;
          tft.fillScreen(BLACK);
          tft.setCursor(0, 5);
          tft.println("Quel est le\nnombre mystere ?");

        }
      }
    }
  }
}

void loop()
{
  currentMillis = millis();
  // Serial.println(currentMillis);

  lastButtonStateStart = currentButtonStateStart; // Afficher à l'écran, une seule fois, ce sur quoi le joueur a pressé
  currentButtonStateStart = digitalRead(pinButtonStart);
  if (lastButtonStateStart == HIGH && currentButtonStateStart == LOW)
  {
    buttonState = !buttonState;
    mysteryStart = true;
  }

  if (mysteryStart == true) {
    introduction();
    mysteryStart = false;
  }

  lastButtonState0 = currentButtonState0; // Afficher à l'écran, une seule fois, ce sur quoi le joueur a pressé
  currentButtonState0 = digitalRead(pinButton30);
  if (lastButtonState0 == HIGH && currentButtonState0 == LOW)
  {
    buttonState = !buttonState;
    tableau[0] = 0;
    tft.print(tableau[0]);
  }

  lastButtonState1 = currentButtonState1; // Afficher à l'écran, une seule fois, ce sur quoi le joueur a pressé
  currentButtonState1 = digitalRead(pinButton31);
  if (lastButtonState1 == HIGH && currentButtonState1 == LOW)
  {
    buttonState = !buttonState;
    tableau[1] = 1;
    tft.print(tableau[1]);
  }

  lastButtonState2 = currentButtonState2; // Afficher à l'écran, une seule fois, ce sur quoi le joueur a pressé
  currentButtonState2 = digitalRead(pinButton32);
  if (lastButtonState2 == HIGH && currentButtonState2 == LOW)
  {
    buttonState = !buttonState;
    tableau[2] = 2;
    tft.print(tableau[2]);
  }

  lastButtonState3 = currentButtonState3; // Afficher à l'écran, une seule fois, ce sur quoi le joueur a pressé
  currentButtonState3 = digitalRead(pinButton33);
  if (lastButtonState3 == HIGH && currentButtonState3 == LOW)
  {
    buttonState = !buttonState;
    tableau[3] = 3;
    tft.print(tableau[3]);
  }

  lastButtonState4 = currentButtonState4; // Afficher à l'écran, une seule fois, ce sur quoi le joueur a pressé
  currentButtonState4 = digitalRead(pinButton34);
  if (lastButtonState4 == HIGH && currentButtonState4 == LOW)
  {
    buttonState = !buttonState;
    tableau[4] = 4;
    tft.print(tableau[4]);
  }

  lastButtonState5 = currentButtonState5; // Afficher à l'écran, une seule fois, ce sur quoi le joueur a pressé
  currentButtonState5 = digitalRead(pinButton35);
  if (lastButtonState5 == HIGH && currentButtonState5 == LOW)
  {
    buttonState = !buttonState;
    tableau[5] = 5;
    tft.print(tableau[5]);
  }

  lastButtonState6 = currentButtonState6; // Afficher à l'écran, une seule fois, ce sur quoi le joueur a pressé
  currentButtonState6 = digitalRead(pinButton36);
  if (lastButtonState6 == HIGH && currentButtonState6 == LOW)
  {
    buttonState = !buttonState;
    tableau[6] = 6;
    tft.print(tableau[6]);
  }

  lastButtonState7 = currentButtonState7; // Afficher à l'écran, une seule fois, ce sur quoi le joueur a pressé
  currentButtonState7 = digitalRead(pinButton37);
  if (lastButtonState7 == HIGH && currentButtonState7 == LOW)
  {
    buttonState = !buttonState;
    tableau[7] = 7;
    tft.print(tableau[7]);
  }

  lastButtonState8 = currentButtonState8; // Afficher à l'écran, une seule fois, ce sur quoi le joueur a pressé
  currentButtonState8 = digitalRead(pinButton38);
  if (lastButtonState8 == HIGH && currentButtonState8 == LOW)
  {
    buttonState = !buttonState;
    tableau[8] = 8;
    tft.print(tableau[8]);
  }

  lastButtonState9 = currentButtonState9; // Afficher à l'écran, une seule fois, ce sur quoi le joueur a pressé
  currentButtonState9 = digitalRead(pinButton39);
  if (lastButtonState9 == HIGH && currentButtonState9 == LOW)
  {
    buttonState = !buttonState;
    tableau[9] = 9;
    tft.print(tableau[9]);
  }

  lastButtonStateEnter = currentButtonStateEnter; // Afficher à l'écran, une seule fois, ce sur quoi le joueur a pressé
  currentButtonStateEnter = digitalRead(pinButtonEnter);
  if (lastButtonStateEnter == HIGH && currentButtonStateEnter == LOW)
  {
    buttonState = !buttonState;
    tft.print("ENTER"); // test
  }

  lastButtonStateDelete = currentButtonStateDelete; // Afficher à l'écran, une seule fois, ce sur quoi le joueur a pressé
  currentButtonStateDelete = digitalRead(pinButtonDelete);
  if (lastButtonStateDelete == HIGH && currentButtonStateDelete == LOW)
  {
    buttonState = !buttonState;
    tft.print("DELETE"); // test
  }
}

[/code]
Et au passage si certains ont des conseils concernant mon jeu, je suis preneur :slight_smile:

Merci d'avance pour votre aide.

Bonjour,

Quand tu entres dans le premier if tu réinitialises previousMillis à currentMillis, donc dans le second if currentMillis - previousMillis est toujours 0.

Top j'ai pu corriger mon code et trouver la solution, maintenant ça fonctionne comme il faut. Merci beaucoup !!!