Go Down

Topic: loop pendant un certains temps (Read 12120 times) previous topic - next topic

tomlaves

Aug 04, 2013, 12:16 pm Last Edit: Aug 04, 2013, 12:23 pm by tomlaves Reason: 1
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 . :)

Christian_R

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
Christian

tomlaves

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

jfs

Ici :

http://forum.arduino.cc/index.php?topic=33698.5
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

B@tto


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/
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

fdufnews


icare

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
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

B@tto

Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

tomlaves

#8
Aug 05, 2013, 02:17 pm Last Edit: Aug 05, 2013, 02:32 pm by tomlaves Reason: 1
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 ?

fdufnews

#9
Aug 05, 2013, 03:03 pm Last Edit: Aug 05, 2013, 05:12 pm by fdufnews Reason: 1

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.

Christian_R


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.
Christian

B@tto

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

Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

tomlaves


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

tomlaves

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


B@tto

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

Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

Go Up