loop pendant un certains temps

salue a tous,
je suis sur un projet de mettre des Leds sur un Avion RC,

et je suis bientôt a la fin ,mais il me manque juste de savoir si on peut avoir un void loop pendant par exemple 5 secondes,
comme le code sera très long ,je veux gagner le plus de lignes de code que possible .

donc et t-il possible de faire par exemple :

void loop () {
Led1 = HIGH
delay(300);
Led1 = LOW
delay(300);
}

et ce code se repète par exemple 5 fois ou pendant une durée de 5 secondes ,et bien sur en gagnant le plus de ligne de code donc pas de triche ,pas de copier coller 5 fois . :slight_smile:

La boucle tourne indéfiniment.
Si tu veux arrêter le clignotement au bout d’un certain temps il faut utiliser millis()
http://arduino.cc/en/Reference/millis

Pour faire un nombre précis d’actions, une boucle for permet de les compter
http://arduino.cc/en/Reference/for

Un exemple S'il vous plaît pour "millis" ,pour millis je n'ai pas tout compris

Ici :

http://forum.arduino.cc/index.php?topic=33698.5

tomlaves:
Un exemple S'il vous plaît pour "millis" ,pour millis je n'ai pas tout compris

tomlaves:
Un exemple S'il vous plaît pour "millis" ,pour millis je n'ai pas tout compris

Bjr,

B@tto:

tomlaves:
Un exemple S'il vous plaît pour "millis" ,pour millis je n'ai pas tout compris

[Tutorial] Les interruptions temporelles avec Arduino | B@ttoMicro - Microcontrôleurs et compagnie !

Bravo B@tto, il y a plein de choses intéressantes

icare:
Bravo B@tto, il y a plein de choses intéressantes

Merci :slight_smile:

merci vraiment a toi B@tto ,a chaque fois c'es toi qui me résout mes problèmes

Mais j'ai encore du mal a comprendre ,

Quel est la difference entre un delay et un millis ?

Si j'ai bien compris ,
Un delay(1000) bloque le code pendant 1 seconde

Un millis(1000) fait looper le code pendant 1 secondes

Donc il faut des { } pour montrer le début et la fin de ce qui faut looper ?

tomlaves:
Quel est la difference entre un delay et un millis ?

Si j’ai bien compris ,
Un delay(1000) bloque le code pendant 1 seconde

Un millis(1000) fait looper le code pendant 1 secondes

La fonction delay() est bloquante, elle attend la fin du temps demandé.
La fonction millis() retourne le temps écoulé à toi d’en faire ce que tu veux.

tomlaves:
Un millis(1000) fait looper le code pendant 1 secondes

Non, millis() te retourne l'heure en millisecondes écoulées depuis le démarrage de ton programme.
En comparant deux instants par soustraction, tu détermines le temps écoulé, et tu choisis ou pas de répéter une action qui a besoin d'être remise à jour.

delay(1000) est une ligne qui fait s'arrêter le code qui ne fait plus rien du tout pendant tout ce temps, la suite du code n'est exécutée qu'après la fin du délai.

Pour étoffer un peu, un delay() c’est :

void delay(unsigned long Pause) {

unsigned long Depart;
while(millis()-Depart<Pause); // boucle dans le vide, tant que heure actuelle - heure de départ (temps écoulé donc) < à la durée d'attente souhaitée

}

Pour imager, millis() c’est ta montre et tu veux faire cuire un oeuf 3 minutes. Comment du fait dans la vraie vie ? Tu note l’heure de départ dans ta tête (variable “Depart”) et tu contrôles régulièrement si Depart + 3 min est dépassé. Ici c’est exactement la même chose :wink:

fdufnews:
La fonction delay() est bloquante, elle attend la fin du temps demandé.
La fonction millis() retourne le temps écoulé à toi d'en faire ce que tu veux.

Quesque tu veux dire par ,La fonction millis() retourne le temps ?

je suis désolée mais j'ai vraiment beaucoup de mal a comprendre

est-ce que quelqu'un pourrait me faire le code (je comprend mieux comme sa )

avec un stroboscope :

void loop () {
Led1 = High
delay(200);
Led1 = Low
delay(200);

et après un "millis de 5secondes le même stroboscope mais avec un delay(500)

ce qui fera :

void loop () {

début du millis de 5000 millisecondes

Led1 = High
delay(200);
Led1 = Low
delay(200);

fin du millis de 5000 millisecondes

Led1 = High
delay(500);
Led1 = Low
delay(500);

Quand une fonction "retourne" une valeur, celà signifie simplement qu'elle "est" une valeur. L'exemple le plus basique, c'est analogRead() :

int Mesure;

Mesure=analogRead(AO); // analogRead() est une fonction mais est égale à une valeur

Pour le code que tu demandes, il suffisait de lire les liens qu'on te donne : http://arduino.cc/en/Tutorial/BlinkWithoutDelay

je pense avoir compris ,j'avais vu le lien sur le millis et le for mais pas le BlinkWithoutdelay (faut dire il porte bien son nom )

voici le code ,ya t'il des erreurs ?

const int ledPin = 13;

int ledState = LOW;
long previousMillis = 0;

long interval = 5000;

void setup() {

pinMode(ledPin, OUTPUT);
}

void loop()
{
unsigned long currentMillis = millis();

if(currentMillis - previousMillis > interval) {

previousMillis = currentMillis;

if (ledState == LOW)
ledState = HIGH;
delay(200);
ledState = LOW;
delay(200);
}
else
ledState = HIGH;
delay(1000);
ledState = LOW;
delay(1000);

digitalWrite(ledPin, ledState);
}

Oui il y a des erreurs, ça sert à quoi de faire ça :

  ledState = HIGH;
      delay(200);
      ledState = LOW;
      delay(200);

Ben il fait ce code en boucle pendant 5s(durée interval)

Ce que je veux faire c’est un flash de led avec un delay(200) puis a la fin des 5secondes

Un flash de led avec un delay(500) .

Il faut mettre digitalWrite(ledPin, ledState); avant les delay(xxx)

Ok ,il y a juste ce problème alors ?

Je peux le mettre dans le void setup (le digitalWrite(ledPin, ledState) )?