Sketch arduino pour faire clignoter une LED sans "delay" et avec intervalles on/off différents
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Sketch arduino pour faire clignoter une LED sans "delay" et avec intervalles on/off différents



  1. #1
    RV85_2

    Sketch arduino pour faire clignoter une LED sans "delay" et avec intervalles on/off différents


    ------

    Bonsoir !

    Je débute totalement en programmation arduino et avec mes maigres connaissances dans le domaine, je cherche à faire clignoter une LED sans utiliser la fonction "delay" qui stoppe le déroulement du programme. Jusque là rien de bien compliqué et j'y arrive grâce à la fonction "millis".

    En revanche la particularité du clignotement que je souhaite obtenir, est d'avoir un coup la led allumée 1 seconde puis éteinte 10 sec et ainsi de suite...

    Avec le code actuel, (que voici en fin de message) je ne parviens pas à avoir de clignotement sauf si je supprime le dernier "if", auquel cas, j'obtiens bien un clignotement. Or avec ce clignotement, la LED est allumée est éteinte pour les mêmes durées (1 seconde ON et 1 seconde OFF )...

    Quelqu'un saurait il me dire ou se trouve mon erreur et comment procéder ?

    Par avance merci pour l'aide apportée, et désolé pour les explications laborieuses ainsi que pour la programmation quelque peu "barbare".



    int led = 11; // led en broche 11
    int intervale; // variable définissant la durée d'extinction de la LED clignotante
    unsigned long previousTime; // variable enregistrant le dernier "temps"
    int ledState; // variable enregistrant l'état de la LED
    int buttonPin = 10; // bouton poussoir en broche 10
    int buttonState; // variable enregistrant l'état du bouton poussoir
    int previousState; // variable enregistrant le précédent état du bouton poussoir
    int variableA; // variable intervenant dans le choix du mode de clignotement
    int duree; // variable définissant la durée d'allumage de la LED lors de son clignotement

    void setup(){
    pinMode (led, OUTPUT); // définit la led (broche 11) comme une sortie
    intervale = 2000;
    ledState = LOW; // définit l'état de la led en début d'execution du programme
    previousTime = millis(); // définit la valeur de "previousTime" en début de programme
    Serial.begin(9600); // active le "moniteur série" pour afficher les valeur de la variable A en cours d'execution du programme
    pinMode (buttonPin, INPUT); // définit le bouton poussoir (broche 10) comme une sortie
    variableA = 1; // mise la valeur 1, la variable A
    duree = 1000; // la durée d'allumage de la LED lors de son clignotement est fixée ici à 1 seconde
    }

    void loop(){
    buttonState = digitalRead (buttonPin); // partie du programme permettant de faire varier la durée où la led est éteinte durant son clignotement
    if(previousState != buttonState){ //
    if (buttonState == HIGH) { //
    variableA ++;}} //
    previousState = buttonState; //
    if (variableA == 4) { //
    variableA =1;} //
    Serial.println (variableA); //
    switch (variableA) { //
    case 1: //
    intervale = 1000; //
    break; //
    //
    case 2: //
    intervale = 5000; //
    break; //
    //
    case 3: //
    intervale = 10000; //
    break; //----------------------------------------------------------------------------------------------------
    }
    if ((millis()-previousTime) > intervale){
    previousTime = millis();
    ledState = !ledState;
    digitalWrite (led, ledState);
    }

    if ((previousTime + duree) > millis ()){
    previousTime = millis();
    ledState = !ledState;
    digitalWrite (led, ledState);
    }
    }

    -----

  2. #2
    freepicbasic

    Re : Sketch arduino pour faire clignoter une LED sans "delay" et avec intervalles on/off différents

    test l'etat de la led + ta condition et change avec l'état opposé.
    Le digitalwrite est commun et peut donc se faire après les tests

    Code:
    if ( (ledState==HIGH) && ((millis()-previousTime) > intervale) ){
      previousTime = millis();
      ledState = LOW;
      }
    
    if ( (ledState==LOW) && ((previousTime + duree) > millis () ) ){
      previousTime = millis();
      ledState = HIGH;
      }
    
    digitalWrite (led, ledState);
    Dernière modification par JPL ; 18/11/2014 à 23h11. Motif: Remplacement de la balise Quote par Code
    A+, pat

  3. #3
    RV85_2

    Re : Sketch arduino pour faire clignoter une LED sans "delay" et avec intervalles on/off différents

    Merci beaucoup pour cette réponse rapide !

    J'ai modifié le code suivant tes préconisations. Les premiers essais avec ces modifications ne sont pas concluants. La Led reste allumée de façon fixe...
    Je vais poursuivre mes recherches pour trouver une solution.

    J'ai vérifié les connexions et le câblage pour m'assurer que le problème ne vienne pas de là, et à priori c'est clair.

  4. #4
    arsene de gallium

    Re : Sketch arduino pour faire clignoter une LED sans "delay" et avec intervalles on/off différents

    Il faut utiliser la fonction millis() de cette façon:
    //On incrémente Chrono toutes les 0,5s
    if ((millis() - Time) > 500)
    {
    Time = millis();
    Top ++;
    if ((Top < 1) // c'est à dire Top = 0
    {
    Eteindre la LED
    }
    else
    {
    Allumer la LED
    }
    if ((Top > 2) //c'est à dire différent de 0
    {
    Allumer la LED
    Top = 0;
    }
    Si on test avec top > 1 la durée "allumer" / "éteindre" est identique mais ne bloc pas le programme contrairement à delay(500).
    Il est possible à partir de ça de faire des durées différentes, il suffit de tester top avec des valeurs >1
    Dernière modification par arsene de gallium ; 19/11/2014 à 13h30.

  5. A voir en vidéo sur Futura
  6. #5
    RV85_2

    Re : Sketch arduino pour faire clignoter une LED sans "delay" et avec intervalles on/off différents

    Bonsoir Arsene et merci pour ta réponse.

    Je suis plutôt partit sur l'idée que développe Freepicbasic, dans sa réponse.

    Je crois avoir une piste pour comprendre pourquoi ça ne fonctionne pas exactement comme prévu :

    J'ai supprimer pas mal de ligne de code pour clarifier le programme, et j'ai fait afficher sur le moniteur série l'état de la led à chaque changement. Ainsi à l'écran s'affiche des successions de 01010101... et je me suis rendu compte que à peine un 0 s'affiche que un 1 s'affiche également. j'en déduis que le code tel que rédigé ne permet pas de maintenir l'état 0 de la led...

    je poursuis donc mes recherches.

    Merci à vous votre aide.

Discussions similaires

  1. Help Bouton Poussoir pour Servomoteur '" Arduino "
    Par moha698 dans le forum Électronique
    Réponses: 6
    Dernier message: 23/04/2014, 07h11
  2. Réponses: 23
    Dernier message: 30/03/2012, 23h23
  3. Scilab : fonction "delay" pour un retard pur ?
    Par invite1e8ad136 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 01/02/2009, 20h20
  4. Instruction "delay" CC11 pour 68HC11F1
    Par thomasalbert1993 dans le forum Électronique
    Réponses: 12
    Dernier message: 05/06/2007, 16h35
Découvrez nos comparatifs produits sur l'informatique et les technologies.