mauvaise utilisation fonction millis()

Bonjour tous le monde, je suis bloqué sur un programme qui ne fait pas totalement ce que je souhaite.
Je pilote une matrice leds RGB de 64leds (8*8) avec un uno. Je fait varier la couleurs des leds du jaune vers le rouge en utilisant la fonction millis() pour faire la variation, cela fonctionne très bien.
Mais ce que je souhaite c’est que lorsque millis() atteint la valeur de 35000 la boucle void loop() n’exécute plus que la fonction rougeFixe(), mais le problème c’est que le programme revient toujours au début et recommence la variation du jaune vers le rouge.
J’ai essayé plein de façon avec des boucles “do…while”, “while”, des if…else, des if…else if mais à chaque fois la boucle reprend et la variation reprend… La matrice leds est “WS2812B”.

#include <EasyNeoPixels.h>

#include <Adafruit_NeoPixel.h>

// Which pin on the Arduino is connected to the NeoPixels?
// On a Trinket or Gemma we suggest changing this to 1
#define PIN            3
 
// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS      64
 
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
 
unsigned long millis(); 
int previousTime = 0;
int interval = 200;
unsigned long interval2 = 35000;
int X = 255;
int Y = 195;
int Z = 51;
boolean verrou = 0;

void setup() 
{
  pixels.begin(); // This initializes the NeoPixel library.
}
 
void variableY()
{
  for(Y=195;Y>0;Y-=1) 
  {
    for(int i=0;i<NUMPIXELS;i+=1)
    {
    // pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
    pixels.setPixelColor(i, pixels.Color(255,Y,Z)); // Moderately bright green color.
    pixels.show(); // This sends the updated pixel color to the hardware.
    //delay(delayval);
    }
    /*if(Y==0)
    {
      int Y=0;
    }*/
  }
}  

void variableZ()
{
  for(Z=51;Z>0;Z-=1)
    {
    for(int i=0;i<NUMPIXELS;i+=1)
    {
    // pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
    pixels.setPixelColor(i, pixels.Color(255,Y,Z)); // Moderately bright green color.
    pixels.show(); // This sends the updated pixel color to the hardware.
    //delay(delayval);
    }
    /*if(Z==0)
    {
      int Z=0;
    }*/
  }
}

void rougeFixe()
{
  for(int i=0;i<NUMPIXELS;i+=1)
    {
    pixels.setPixelColor(i, pixels.Color(255,0,0)); // Moderately bright green color.
    pixels.show();
    }
}



void loop() 

{ 
  //unsigned long now = millis();
  //while(millis() < 33000)
  
  if (5 < millis() < 35000 && Y >= 0 && Z >= 0)
  {
  if (millis()-previousTime >= interval)
    {
      variableY();
      variableZ();
      previousTime=millis();
    } 
  }
  else if (millis() > interval2)
  {
    rougeFixe();
  }
  //now=millis();
}

Bonjour,

En C ce que tu veux faire ne s’écrit pas comme ça

  if (5 < millis() < 35000 && Y >= 0 && Z >= 0)

Mais comme ça

  if (5 < millis() && millis() < 35000 && Y >= 0 && Z >= 0)

Bonjour,

En C ce que tu veux faire ne s’écrit pas comme ça

  if (5 < millis() < 35000 && Y >= 0 && Z >= 0)

Mais comme ça

  if (5 < millis() && millis() < 35000 && Y >= 0 && Z >= 0)

Bonjour Kamill, vraiment merci à toi, c'est bon ça fonctionne la matrice reste au rouge, ce que je voulais.

Je ne code pas assez souvent du coup des erreurs de ce type malheureusement je ne les vois pas facilement.

Merci encore. :slight_smile: