Arduino Forum

International => Français => Topic started by: tomlaves on Aug 04, 2013, 12:16 pm

Title: loop pendant un certains temps
Post by: tomlaves on Aug 04, 2013, 12:16 pm
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 :
Quote

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 . :)
Title: Re: loop pendant un certains temps
Post by: Christian_R on Aug 04, 2013, 12:23 pm
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
Title: Re: loop pendant un certains temps
Post by: tomlaves on Aug 04, 2013, 01:16 pm
Un exemple S'il vous plaît pour "millis" ,pour millis je n'ai pas tout compris
Title: Re: loop pendant un certains temps
Post by: jfs on Aug 04, 2013, 03:25 pm
Ici :

http://forum.arduino.cc/index.php?topic=33698.5
Title: Re: loop pendant un certains temps
Post by: B@tto on Aug 04, 2013, 10:50 pm

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


http://battomicro.wordpress.com/2013/06/07/tutorial-les-interruptions-temporelles-avec-arduino/
Title: Re: loop pendant un certains temps
Post by: fdufnews on Aug 05, 2013, 09:11 am

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

http://arduino.cc/en/Reference/Millis (http://arduino.cc/en/Reference/Millis)
http://arduino.cc/en/Tutorial/BlinkWithoutDelay (http://arduino.cc/en/Tutorial/BlinkWithoutDelay)
Title: Re: loop pendant un certains temps
Post by: icare on Aug 05, 2013, 11:35 am
Bjr,


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


http://battomicro.wordpress.com/2013/06/07/tutorial-les-interruptions-temporelles-avec-arduino/

Bravo B@tto, il y a plein de choses intéressantes
Title: Re: loop pendant un certains temps
Post by: B@tto on Aug 05, 2013, 01:08 pm

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


Merci :)
Title: Re: loop pendant un certains temps
Post by: tomlaves on Aug 05, 2013, 02:17 pm
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 ?
Title: Re: loop pendant un certains temps
Post by: fdufnews on Aug 05, 2013, 03:03 pm

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.
Title: Re: loop pendant un certains temps
Post by: Christian_R on Aug 05, 2013, 03:35 pm

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.
Title: Re: loop pendant un certains temps
Post by: B@tto on Aug 05, 2013, 03:57 pm
Pour étoffer un peu, un delay() c'est :

Code: [Select]


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 ;)

Title: Re: loop pendant un certains temps
Post by: tomlaves on Aug 05, 2013, 05:51 pm

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
Title: Re: loop pendant un certains temps
Post by: tomlaves on Aug 05, 2013, 06:03 pm
est-ce que quelqu'un pourrait me faire le code (je comprend mieux comme sa )

avec un stroboscope :
Quote
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 :
Quote
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);
Title: Re: loop pendant un certains temps
Post by: B@tto on Aug 05, 2013, 06:50 pm
Quand une fonction "retourne" une valeur, celà signifie simplement qu'elle "est" une valeur. L'exemple le plus basique, c'est analogRead() :

Code: [Select]

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

Title: Re: loop pendant un certains temps
Post by: tomlaves on Aug 06, 2013, 10:00 am
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 ?
Quote
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);
  }
Title: Re: loop pendant un certains temps
Post by: B@tto on Aug 06, 2013, 11:01 am
Oui il y a des erreurs, ça sert à quoi de faire ça :

Code: [Select]
  ledState = HIGH;
      delay(200);
      ledState = LOW;
      delay(200);
Title: Re: loop pendant un certains temps
Post by: tomlaves on Aug 07, 2013, 09:06 am
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) .
Title: Re: loop pendant un certains temps
Post by: Christian_R on Aug 07, 2013, 10:15 am
Il faut mettre digitalWrite(ledPin, ledState); avant les delay(xxx)
Title: Re: loop pendant un certains temps
Post by: tomlaves on Aug 07, 2013, 04:12 pm
Ok ,il y a juste ce problème alors ?

Je peux le mettre dans le void setup (le digitalWrite(ledPin, ledState) )?
Title: Re: loop pendant un certains temps
Post by: B@tto on Aug 07, 2013, 04:41 pm
Si t'as envie qu'il ne s'exécute qu'une fois ...
Title: Re: loop pendant un certains temps
Post by: tomlaves on Aug 07, 2013, 05:20 pm
Ok sinon c'est dans le void loop