Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Allumer une led pendant x Secondes avec Arduino



  1. #1
    fomes

    Allumer une led pendant x Secondes avec Arduino


    ------

    Bonjour à tous,
    Je suis débutant dans la programmation de microcontrôleur Arduino.
    Je sais faire un programme qui clignote une Led, avec le cœur du programme suivant :
    _____
    void loop(){ // debut de la fonction loop()
    digitalWrite(LED,HIGH); // met la broche au niveau haut (5V) – allume la LED
    delay(2000); // pause de 2000 millisecondes (ms)
    digitalWrite(LED,LOW); // met la broche au niveau bas (0V) – éteint la LED
    delay(2000); // pause de 2000 ms
    }
    ____
    Mais je veux maintenant que la Led s’allume pendant le délais de 2000ms, puis s’éteint.
    Ainsi, j’ai supprimé la dernière ligne du programme ci-dessous. Résultat, la Led reste allumer et ne s’éteint jamais.
    Merci de m’éclairer.

    -----

  2. Publicité
  3. #2
    pilatomic

    Re : Allumer une led pendant x Secondes avec Arduino

    En fait, si tu supprime la dernière ligne du programme, ta LED s'éteint quand même, mais pendant un laps de temps extrêmement court de l'ordre de la microseconde, car tu enlève la temporisation.

    Sur les arduino, la fonction loop() est exécutée en boucle. Ce qu'il faut faire, c'est bloquer le programme après la ligne digitalWrite(LED,LOW)

    Pour ça, remplace la dernière ligne par while(1);. C'est une boucle infinie, ça bloque le programme, l'arduino execute la boucle infini, et comme il ne peut pas en sortir, il reste là.

  4. #3
    fomes

    Re : Allumer une led pendant x Secondes avec Arduino

    Bonjour Pilatomic,
    Merci pour ta réponse rapide. J’ai fais une simulation et ça marche comme convenu.
    Mais il y a une inquiétude.
    J’aimerais en principe introduire ce bout de code dans un programme. Mais avec avec le WHILE (1), le programme s’exécute normalement mais une fois seulement…
    ___
    void loop(){ // debut de la fonction loop()
    ETAT_Opto=digitalRead(Opto); // lit l'état de Opto et met la valeur 0/1 dans la variable
    if (ETAT_Opto==1)
    {
    digitalWrite (Relais,HIGH);
    delay (3000);
    digitalWrite (Relais,LOW);
    while (1);
    }

    if (ETAT_Opto==0)
    {
    digitalWrite (Relais,LOW);
    }
    ____

    En récapitulatif, je souhaiterais envoyer des impulsions de x secondes en fonction de certaines conditions

  5. #4
    pilatomic

    Re : Allumer une led pendant x Secondes avec Arduino

    Dans ce cas, il faut changer la condition du while, que l'arduino quitte la boucle while lorsque ton entrée retourne à 0 :

    void loop(){ // debut de la fonction loop()
    if (digitalRead(Opto)==1)
    {
    digitalWrite (Relais,HIGH);
    delay (3000);
    digitalWrite (Relais,LOW);
    while (digitalRead(Opto)==1);
    }

    Ce code suffit. Si l'entrée Opto vaut 1, alors on active la sortie Relais, on attend 3s, puis on désactive la sortie relais. Et on boucle ici tant que l'entrée Opto reste à 1.
    Pas besoin du if (ETAT_Opto==0) car dans tous les cas la sortie Relais est désactivée quand l'arduino arrive à cet endroit du programme. ( de plus, l'emploi du mot ELSE est plus indiqué dans ce genre de situations )

  6. #5
    indri

    Re : Allumer une led pendant x Secondes avec Arduino

    Sérieux, conseiller de mettre un while(1); dans un code

    Tu veux une seule impulsion ou plusieurs?
    Si plusieurs..une boucle avec condition par ex...

    Code:
    while (digitalRead(Opto)==1)
    {
    digitalWrite (Relais,HIGH);
    delay (3000);
    digitalWrite (Relais,LOW);
    delay(3000);
    }
    Si ton code ne fait que ca ok....sinon c'est pas génial comme soluce car tu bloque ton µC pendant 3 sec...
    Là où va le vent...

  7. A voir en vidéo sur Futura
  8. #6
    pilatomic

    Re : Allumer une led pendant x Secondes avec Arduino

    Je ne vois pas le problème avec le while(1);
    C'est un µC, il n'y a pas d'autres thread à coté qui ont besoin du cpu, donc si le cpu ne doit rien faire, bah, soit on l’arrête ( je pense au sleep sur les PIC ) soit while(1);

  9. Publicité
  10. #7
    fomes

    Re : Allumer une led pendant x Secondes avec Arduino

    Bonjour,
    Problème résolu.
    Merci à tous.

Sur le même thème :

Discussions similaires

  1. allumer une led avec un PIC16F84-A
    Par ichigo01 dans le forum Électronique
    Réponses: 66
    Dernier message: 15/10/2016, 00h09
  2. Allumer une led avec un bouton pousoir (Arduino)
    Par Darrkshadow dans le forum Électronique
    Réponses: 9
    Dernier message: 12/12/2012, 14h26
  3. Allumer une led quelques secondes seulement
    Par valork dans le forum Électronique
    Réponses: 5
    Dernier message: 19/10/2009, 20h46
  4. Allumer une LED avec un pic 16F884 (langage c)
    Par wisto59 dans le forum Électronique
    Réponses: 4
    Dernier message: 17/02/2008, 21h41
  5. allumer une Led avec un transistor
    Par Arioch_76 dans le forum Électronique
    Réponses: 1
    Dernier message: 21/01/2008, 23h54
Découvrez nos comparatifs produits sur l'informatique et les technologies.