Variation d'intensité avec temps de pause

Bonjour à tous, je suis un petit nouveau. Je réalise des miniatures avec de plus en plus d’électroniques. Depuis que j'ai découvert Arduino, j'arrive à gérer des programmes pour allumer et éteindre des leds. bref, le plus basique, mais jusque là ça m'allait parfaitement. Mais autant dire que je suis un pur novice dans le domaine.

Je me suis lancé dans un nouveau défi. Je suis en train de réaliser une ile de pirate avec un volcan lumineux, et j’aimerais y intégrer un cycle jour/nuit pour que la nuit le volcan se mette en valeur.

J'arrive à faire ce cycle et ça marche plutôt bien. mon seul soucis c'est que la nuit (quand les leds sont éteintes) ne dure pas assez longtemps. Je ne parviens pas à mettre le programme en pause pour une durée déterminé une fois que l'intensité à baisser

Je précise que ça fait quelques semaines que je recherche sur internet, que je bidouille mon programme dans tous les sens pour vérifier ce qui peut marcher ou non, mais là je suis à deux doigts de baisser les bras.

Vous pourriez m'aider svp ?

int led = 3;
int i = 0;

void setup()
{                
  pinMode(led, OUTPUT);     
}
void loop()
{i=0;
   while (i <= 255) {
  analogWrite(led,i);
  delay(10);
   i = i + 1;
   }

  {i=255;
   while (i >= 0) {
  analogWrite(led,i);
  delay(10);
   i = i - 1;
   }
   {i=0;
   while (i = 0) 
   { analogWrite(led,LOW);
  delay(200);}
   
   }}
    

}

Bonjour,
Il faut que tu distingues un cas jour et un cas nuit, cela n'apparaît pas (encore) dans ton code.
Ensuite il ne faut pas utiliser la fonction delay(x) qui est blocante mais la fonction millis() qui donne le nombre de millisecondes depuis la mise sous tension du micro.

Tu trouvera un exemple d'utilisation de millis() dans le code de "Blink Without Delay"qui se touve dans le répertoire des exemples de l'ide.

J'ai rassemblé ces tutos ici.
Si tu t'en sens le courage, tu peux même tenter FreeRTOS...

Je vous remercie pour vos conseils... malheureusement, j'ai beau écumer tes documents lesept, je crois que je me perd trop vite, j'essaie des codes, ça fonctionne pas... Pourtant ça dois être super simple à programmer.

Une led qui s'allume dans un délai donné, puis on la laisse à pleine puissance x secondes puis elle perd son intensité pendant un temps donné jusqu’à s’éteindre, on attends un délais de x secondes puis elle augmente de nouveaux d'intensité... etc boucle infini

Rien d'autre, par d'interaction avec un bouton, juste un programme qui fait ça quand je branche l'arduino

Bonjour,

Si c'est juste le travail de l'arduino et que tu n'a pas d'autre actions a faire a ton code, tu peut utilisé un délais après l'extinction des leds.

@+

Oui c'est ce que j'essaie de faire, mais mon programme l'ignore. Je ne parviens pas à lui faire faire une pause quand il est dans "l'entre deux" :confused:

il faut le positionner apres l'extinction

int led = 3;
int i = 0;
int dureeNuit=20; //en seconde

void setup()
{                
  pinMode(led, OUTPUT);     
}
void loop()
{i=0;
   while (i <= 255) {
  analogWrite(led,i);
  delay(10);
   i = i + 1;
   }

  {i=255;
   while (i >= 0) {
  analogWrite(led,i);
  delay(10);
   i = i - 1;
   }
   {i=0;
   while (i = 0) 
   { analogWrite(led,LOW);
  delay(200);}
   
   }
  delay(dureeNuit*1000);
  }
    

}

Pour moi ton code est correct, je l'ai simplifié un peu :

int led = 3;

void setup() {
  pinMode(led, OUTPUT);
}

void loop() {
  int i = 0;

  // monter l'intensité
  while (i < 255) {
    analogWrite(led, i++);
    delay(10);
  }

  // pleine puissance 10 s
  delay(10000);

  // baisser l'intensité
  while (i > 0) {
    analogWrite(led, i--);
    delay(10);
  }

  // reste eteinte 5s
  delay(5000);
}

Comment as-tu branché la LED ? Quel arduino utilises-tu ?

Rohhh génial, ça fonctionne nickel c'est exactement ce que je cherchais à faire:) Un grand merci à vous deux ! :slight_smile:

De rien, c'est cool !

J4l13n:
Si c'est juste le travail de l'arduino et que tu n'a pas d'autre actions a faire a ton code, tu peut utilisé un délais après l'extinction des leds.

C'est vrai mais autant ne pas céder à la facilité et prendre les bonnes habitudes immédiatement .
Millis() n'est pas compliqué à comprendre et autant se faire la main sur cet exemple simple car ce sera plus difficile de débuter avec millis() avec des projets plus compliqués.
@Darkland88
Pour la suite ne papillonne pas dans des exemples pris ici ou là.
Commence par apprendre les bonnes bases (programmation et matériel) avec le tuto d'Eskimon dont le lien est donné dans le message épinglé "Règles du forum francophone".

Oui c'est bien ce que je compte faire, en apprendre de plus en plus pour à terme perfectionner mes miniatures avec de la programmation qui peut commander des servo moteurs ou pourquoi pas des écrans lcd. Mais je n'en suis pas encore là.

Mais c'est gentil à vous tous, je bloquais la dessus depuis un bon moment. je vais enfin pouvoir avancer :wink: