Hiatus dans la définition d'une fonction

Bonjour,

Ma fonction fonctionne bien dans une loop()
Elle allume et éteind progressivement une bande de leds alternativement.

Je tente donc de créer une définition de cette fonction.
ça compile mais ne produit rien et je suis coincé.

Je ne comprends pas pourquoi.
Voici les éléments importants du code :


CRGB leds[NUM_LEDS];
CRGB* leds1 = leds;    


// intensité spécifique à une section de LEDs 
void applyBrightness(CRGB* ledArray, int numLeds, uint8_t intensity) {
  for (int i = 0; i < numLeds; i++) {
    ledArray[i].r = (ledArray[i].r * intensity) / 255;
    ledArray[i].g = (ledArray[i].g * intensity) / 255;
    ledArray[i].b = (ledArray[i].b * intensity) / 255;
  }
}

void respire(CRGB* ledArray, int numLeds){
uint8_t BRIGHTNESS = 250;    // Luminosité initiale (commence à 0)
int fadeSpeed = 0;         // Vitesse de variation (calculée dynamiquement)
unsigned long previousMillis = 0;  // Variable pour mesurer le temps écoulé
long cycleDuration = 1500;    // Durée pour un cycle complet
//registre possibles des durées
long cycleDurationMin = 800;
long cycleDurationMax = 3000;
bool increasing = true;          // Indicateur pour savoir si la luminosité doit augmenter ou diminuer

// Vérifier si le cycle est écoulé en fonction de la nouvelle cycleDuration
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= cycleDuration) {
    previousMillis = currentMillis;

    // Appliquer une nouvelle durée de cycle aléatoire à chaque nouveau cycle
  cycleDuration = random(cycleDurationMin, cycleDurationMax); // Nouvelle durée de cycle entre 800 et 3000 ms

    // Inverser la direction de la variation à chaque cycle
    increasing = !increasing;
  }

  // Calculer la vitesse de variation en fonction du temps écoulé
  if (increasing) {
    // Si l'intensité doit augmenter
    fadeSpeed = (128 * (currentMillis - previousMillis)) / cycleDuration;  // Valeur entre 0 et 128
    BRIGHTNESS = fadeSpeed;
  } else {
    // Si l'intensité doit diminuer
    fadeSpeed = (128 * (currentMillis - previousMillis)) / cycleDuration;  

 // Valeur entre 0 et 128
    BRIGHTNESS = 128 - fadeSpeed;
  }

  // Remplir les LEDs avec la couleur blanche et appliquer l'intensité calculée
  fill_solid(ledArray, numLeds, CRGB::White);
  applyBrightness(ledArray, numLeds, BRIGHTNESS);

  //autre tentative vaine:  Ajuster l'intensité de la LED en modifiant sa luminosité
  // for(int i = 0; i = numLeds; i++){
  // ledArray[i].nscale8(BRIGHTNESS); // fondu par un N/256ème de l'intensité courante
  // }

  FastLED.show();
  }


void loop() {
  respire(leds1, 72);
}

Les variables dans respire sont déclarées en local, donc elles sont réinitialisées à chaque appel de la fonction.
Si tu veux que les valeurs soient conservées entre 2 appels, il y a 2 possibilités:

  • déclarer les variables static elles garderont alors leur valeur
  • déclarer les variables en global.
1 Like

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