1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.

Aide Besoin de conseils pour programation Arduino

Discussion dans 'Arduino' créé par Mandrak, 25 Août 2016.

  1. Mandrak

    Mandrak Apprenti

    Messages:
    96
    Inscrit:
    30 Janvier 2015
    Localité:
    Le Sud
    Besoin de conseils pour programation Arduino
    Bonjour a tous

    Je viens de faire l’acquisition depuis peu d'un Arduino Mega2560 afin d'essayer de réalisé un projet pour ma moto, jusqu’à lors je ne connaissais pas les immenses possibilités de cette petite carte, c'est incroyable, je me suis documenté au travers de divers tuto, vidéo, ect.., mais voila si le coté hardware est simplifier par le peu de composant qu'il faut pour une réalisation un peu simpliste, ce qui ne me pose pas de problème, le coté software n'est franchement pas simple pour une personne comme moi qui na jamais fait de programmation, bon je mis met petit a petit, mais la logique du langage C me déroute franchement, arrivé a un certaine age on perd plus de neurone que l'on en gagne, donc pas simple.
    J'aurais besoin d'aide afin de réalisé mon projet que je vais exposé, sure que pour les pro de la programmation ça devrait être un jeu d'enfant, mais chacun son métier.

    Le projet:
    A partir de deux boutons poussoir, avec le premier je voudrais allumer trois Led successivement, puis avec le second les éteindre successivement, avec une particularité.

    je détail:
    avec le premier bouton.
    un appui=> led1 allumé.
    un second appuis=> led1 allumé+led2 allumé.
    un troisième appui=> led1 allume, led2 éteint led3 allumé.
    et inversement avec le second bouton.

    j'ai un bout de code que je mettrais en Pj, je ne vous cache pas que c'est du copier coller de ce que j'ai trouver sur la toile, j'ai quand même réussi a le bidouiller un peu, ça fonctionne mais pas comme je le voudrais, je n'arrive pas a éteindre la Led2 quand Led3 est allumé.
    Suis je peux être partie d'un mauvais exemple ???.

    Merci d'avance a ceux qui peuvent mettre un peu de lumières a mon étage.

    Ps:
    Soyer indulgent avec moi si ce que j'ai modifier sur ce code n'est pas dans les normes, c'est mon premier code...
    Code:
    /* déclaration des constantes pour les nom des broches ; ceci selon le schéma*/
    
    
    const int btn_minus = 31;
    const int btn_plus = 33;
    const int led_0 = 24;
    const int led_1 = 26;
    const int led_2 = 28;
    
    /* déclaration des variables utilisées pour le comptage et le décomptage */
    int nombre_led = 0;                                                       //le nombre qui sera incrémenté et décrémenté
    int etat_bouton;                                                          //lecture de l'état des boutons (un seul à la fois mais une variable suffit)
    int memoire_plus = HIGH;                                                  //état relâché par défaut
    int memoire_minus = HIGH;
    /* initilisation des broches en entrée/sortie */
    void setup()
    {
        pinMode(btn_plus, INPUT_PULLUP);
        pinMode(btn_minus, INPUT_PULLUP);
        pinMode(led_0, OUTPUT);
        pinMode(led_1, OUTPUT);
        pinMode(led_2, OUTPUT);
        Serial.begin(9600);
    }
    void loop()
    {
                                                                           
        etat_bouton = digitalRead(btn_plus);                                 //lecture de l'état du bouton d'incrémentation
                                                                            
        if((etat_bouton != memoire_plus) && (etat_bouton == LOW))            //Si le bouton a un état différent que celui enregistré ET que cet état est "appuyé"
       
        {
            nombre_led++;
            Serial.println("Increment");                                     //on incrémente la variable qui indique combien de LED devrons s'allumer
        }
       
        memoire_plus = etat_bouton;                                          //on enregistre l'état du bouton pour le tour suivant
       
       
        //et maintenant pareil pour le bouton qui décrémente                 //lecture de son état
        etat_bouton = digitalRead(btn_minus);
                                                                            
       
                                                                           
        if((etat_bouton != memoire_minus) && (etat_bouton == LOW))           //Si le bouton a un état différent que celui enregistré ET que cet état est "appuyé"
       
        {
            nombre_led--;
             Serial.println("Decrement");                                    //on décrémente la valeur de nombre_led
        }
        memoire_minus = etat_bouton;                                         //on enregistre l'état du bouton pour le tour suivant
       
                                                                             
        if(nombre_led > 4)                                                   //on applique des limites au nombre pour ne pas dépasser
        {
            nombre_led = 4;
        }
        if(nombre_led < 0)
        {
            nombre_led = 0;
        }
       
                                                                           //appel de la fonction affiche() que l'on aura créée
                                                                           
        affiche(nombre_led);                                               //on lui passe en paramètre la valeur du nombre de LED à éclairer
    }
    void affiche(int valeur_recue)
    {
                                                                          
        digitalWrite(led_0, HIGH);
        digitalWrite(led_1, HIGH);                                          //on éteint toutes les leds
        digitalWrite(led_2, HIGH);
       
                                                                           
        if(valeur_recue >= 1)                                               //Puis on les allume une à une
        {
            digitalWrite(led_0, LOW);
        }
        if(valeur_recue >= 2)
        { 
            digitalWrite(led_1, LOW);
        }
        if(valeur_recue >= 3)
        {
            digitalWrite(led_2, LOW);
          
        }
       
    }
     
  2. vibram

    vibram Compagnon

    Messages:
    783
    Inscrit:
    15 Mars 2014
    Besoin de conseils pour programation Arduino
    Salut
    Peux tu détailler ce que va faire le bouton 2 (de manière plus précise que "inversement") histoire d'être sur de partir sur de bonnes bases :wink:
    Je vais regarder ce soir
     
  3. Mandrak

    Mandrak Apprenti

    Messages:
    96
    Inscrit:
    30 Janvier 2015
    Localité:
    Le Sud
    Besoin de conseils pour programation Arduino
    Bonsoir vibram

    Merci d'avoir répondue si rapidement, pour inversement:

    Pour le deuxième bouton:
    premier appuis => led3 éteint, led2 allumé.
    second appuis => led3 et led2 éteint, led1 allumé.
    troisième appuis=> toutes les led éteinte.

    @+ Cordialement
     
  4. jpbbricole

    jpbbricole Ouvrier

    Messages:
    443
    Inscrit:
    26 Mai 2016
    Localité:
    Corsier-sur-Vevey (Vaud)
    Département:
    1804
    Besoin de conseils pour programation Arduino
    Salut Mandrak

    Avec un pseudo comme celui-ci, rien ne doit être impossible pour toi!
    Rassures-toi, je m'y suis mis à ~62 ans!
    Excellent programme pour débuter. Un premier conseil, essaie dabord de lire un bouton poussoir pour te rendre compte combien d'impulsions tu généres avec une pression!
    Celà va transformer tes leds en sapin de Noël!. Donc il faut traiter les rebonds. Vaste programme. Tout celà pour en arriver à un truc essentiel, dans la programmation d'un Arduino, les bibliothèques. Autant commencer tout de suite d'un bon pied.
    Pour les boutons, c'est Boutton.h
    Si tu est interessé, je rechercherai les références.

    Cordialement
    jpbbricole
     
  5. psemel

    psemel Ouvrier

    Messages:
    273
    Inscrit:
    21 Mars 2009
    Localité:
    oise
    Besoin de conseils pour programation Arduino
    bonsoir,

    un K2000 manuel pour moto:lol:

    L'exemple est compliqué, il y a un moyen plus simple sans utilisé trop de variable.
    En complément du post précédent que ce passe t'il si led 1 et 2 sont allumées et que tu appuis sur le bouton -: reste à définir exactement tes besoins.

    remarque sur les commentaires dans ton programme
    High = led allumée Low= Eteint

    Une mega est surdimensionner pour faire cela.
     
  6. 59JAG

    59JAG Apprenti

    Messages:
    121
    Inscrit:
    7 Février 2010
    Localité:
    59 chti nord
    Besoin de conseils pour programation Arduino
    Bonjour
    pourquoi ne pas mettre l etat de chaque led dans les conditions

    if(valeur_recue = 1)
    {
    digitalWrite(led_0, LOW);
    digitalWrite(led_1, HIGH);
    digitalWrite(led_2, HIGH);
    }
    if(valeur_recue = 2)
    {
    digitalWrite(led_0, LOW);
    digitalWrite(led_1, LOW);
    digitalWrite(led_2, HIGH
    }
    if(valeur_recue = 3)
    {
    digitalWrite(led_0, LOW);
    digitalWrite(led_1, HiGH);
    digitalWrite(led_2, LOW);
    }
     
  7. Mandrak

    Mandrak Apprenti

    Messages:
    96
    Inscrit:
    30 Janvier 2015
    Localité:
    Le Sud
    Besoin de conseils pour programation Arduino
    Bonsoir a tous

    @jpbbricole

    Respect, j'en 5 de moins que toi.

    Tu sais se qu'on dit sur le "Canada dry"...:lol:

    Oui tu a tout a fait raison, j'en ai fait l’essaie sur ma breadbord et effectivement au lieu d'allumer les led une a une c’était une cacophonique,
    j'y ai trouver un remède hardware en y rajoutant un condo de filtrage de10n, ca fonctionne, je sais qu'il existe une solution sofware que j'ai trouver sur ce site mais j'ai ete incapable de le mettre en place.

    Volontiers, il est vrai que le monde d'Arduino est passionnant, de plus j'ai d'autres projet mais plus compliqué, pour cela il faudra vraiment que je maitrise plus le langage C.


    @psemel
    Non... pas ca.., je vais remplacer les led par des transistors de puissance afin de commander les feux avant (et arrière aussi) de la moto, si tu suis la logique de ce que j'ai écrit dans le post initial tu comprendra.

    Oui certainement, mais je par de zéro.

    Tout a fait, c'est pour cela que j'ai aussi acheter une nano pro avec plug usb, 4€ !!, c'est même pas le prix des composants pour réalisé ce montage en traditionnelle.

    @59JAG
    J'ai essayer ca, mais sa ne fonctionne pas, la led 1 s’estompe mais ne s’éteint pas.
    if(valeur_recue = 3)
    {
    digitalWrite(led_2, LOW);
    digitalWrite(led_1, HiGH);
    }


    Cordialement a tous
     
  8. coredump

    coredump Compagnon

    Messages:
    3 404
    Inscrit:
    8 Janvier 2007
    Localité:
    Côte d'azur
    Besoin de conseils pour programation Arduino
    Code:
    if(valeur_recue == 3)
    Sinon ca va pas faire ce que vous pensez...

    Ou mieux:

    Code:
    switch (valeur_recue) {
        case 1:
            bla bla...;
             break;
        case 2:
             bla bla...;
             break;
        default:
             break;
    }
    
     
  9. vibram

    vibram Compagnon

    Messages:
    783
    Inscrit:
    15 Mars 2014
    Besoin de conseils pour programation Arduino
    je vois que pas mal de monde a proposé des choses
    voici ma proposition:
    https://circuits.io/circuits/2606856-3-led-mandrak

    Essaie de le mettre en oeuvre avec ton filtre sur le BP, ca doit fonctionne je pense.
    Au cas ou tu ne veux pas t'inscrire sur circuits.io

    Attention à adapter les pin des boutons aux pin sur ton mega, ce ne sont pas les memes pour les int pullup il me semble
    et le code:
    Code:
    int led1 = 10;
    int led2 = 9;
    int led3 = 8;
    int pb1 = 2;
    int pb2 = 3;
    int pbS1 = 0;
    int pbS2 = 0;
    int led1S = 0;
    int led2S = 0;
    
    
    
    void setup() {
      pinMode(led1, OUTPUT);
      pinMode(led2, OUTPUT);
      pinMode(led3, OUTPUT);
      pinMode(pb1, INPUT_PULLUP);
      pinMode(pb2, INPUT_PULLUP);
      attachInterrupt(digitalPinToInterrupt(pb1), bouton1, RISING); // set an interrupt on PinA, looking for a rising edge signal and executing the "PinA" Interrupt Service Routine (below)
      attachInterrupt(digitalPinToInterrupt(pb2), bouton2, RISING);
      Serial.begin(9600);
    }
    
    
    void bouton1(){
      cli();
      pbS1 = digitalRead(pb1);
       // Serial.print("led1S:");
      // Serial.println(led1S);
      if(pbS1 == HIGH)
        {
      digitalWrite(led1, HIGH);
      digitalWrite(led2, LOW);
      digitalWrite(led3, LOW);
        }
      if((pbS1 == HIGH) && (led1S == 1))
        {
       digitalWrite(led1, HIGH);
      digitalWrite(led2, HIGH);
      digitalWrite(led3, LOW);
        }
       if((pbS1 == HIGH) && (led1S == 2))
        {
       digitalWrite(led1, HIGH);
      digitalWrite(led2, LOW);
      digitalWrite(led3, HIGH);
        }
      if((pbS1 == HIGH) && (led1S > 2))
        {
       digitalWrite(led1, HIGH);
      digitalWrite(led2, LOW);
      digitalWrite(led3, HIGH);
        }
      led1S ++;
      led2S = 0;
      }
    
      void bouton2()
      { 
      cli();
      pbS2 = digitalRead(pb2);
      // Serial.print("led2S:");
      // Serial.println(led2S);
      if(pbS2 == HIGH)
        {
      digitalWrite(led1, HIGH);
      digitalWrite(led2, HIGH);
      digitalWrite(led3, LOW);
        }
      if((pbS2 == HIGH) && (led2S == 1))
        {
       digitalWrite(led1, HIGH);
      digitalWrite(led2, LOW);
      digitalWrite(led3, LOW);
        }
       if((pbS2 == HIGH) && (led2S == 2))
        {
       digitalWrite(led1, LOW);
      digitalWrite(led2, LOW);
      digitalWrite(led3, LOW);
        }
      if((pbS2 == HIGH) && (led2S > 2))
        {
       digitalWrite(led1, LOW);
      digitalWrite(led2, LOW);
      digitalWrite(led3, LOW);
        }
      led2S ++;
      led1S = 0;
      }
    
    void loop() {
     
    }
    
    Si la solution fonctionne et te convient, je commente afin que tu comprennes ce que jai fait :wink: Screenshot from 2016-08-25 20-23-14.png
     
  10. jpbbricole

    jpbbricole Ouvrier

    Messages:
    443
    Inscrit:
    26 Mai 2016
    Localité:
    Corsier-sur-Vevey (Vaud)
    Département:
    1804
    Besoin de conseils pour programation Arduino
    Salut Mandrak
    Je te mets le fichier ZIP de la bibliothèque Button.h
    Tu décompresses le fichier ZIP et tu mets le répertoire Button dans le répertoire où est installé ton IDE Arduino, sous répertoire libraries.
    Voici un exemple d'utilisation pour tes données.
    En tête du code 1 lien utile.
    Code:
    //http://playground.arduino.cc/Code/Button
    
    #include <Button.h>
    
    #define boutonMonterPin 6
    #define boutonDescendrePin 7
    
    Button boutonMonter = Button(boutonMonterPin,PULLUP);            // Paramétrage de la librairie Button.h
    Button boutonDescendre = Button(boutonDescendrePin,PULLUP);         
    
    #define nombreDeLeds 3
    int compteurPas;
    
    void setup()
    {
        compteurPas = 0;
        Serial.begin(9600);
        delay(200);
        Serial.println("Demo button.h");
    }
    
    void loop()
    {
        if(boutonMonter.uniquePress())
        {
            compteurPas ++;
            affichageLeds();
        }
        if(boutonDescendre.uniquePress())
        {
            compteurPas --;
            affichageLeds();
        }
    }
    
    void affichageLeds()
    {
        if (compteurPas > nombreDeLeds)    {compteurPas = nombreDeLeds;}
        if (compteurPas < 0) {compteurPas = 0;}
      
        switch (compteurPas)
        {
            case 0:
                Serial.println("  -  -  ");
                break;
            case 1:
                Serial.println("L1-  -  ");
                break;
            case 2:
                Serial.println("L1-L2-  ");
                break;
            case 3:
                Serial.println("L1-  -L3");
                break;
        }
    }
    
    Si tu as des questions, problème(s)....

    Bonne soirée
    jpbbricole

    Voir la pièce jointe Button_Librairie.zip
     
    Dernière édition: 25 Août 2016
  11. Mandrak

    Mandrak Apprenti

    Messages:
    96
    Inscrit:
    30 Janvier 2015
    Localité:
    Le Sud
    Besoin de conseils pour programation Arduino
    Re bonsoir a tous

    @
    coredump
    Je vois que tu es sur la Cote d'Azur, nous somme voisin, je suis du haut Var.
    Vu que je suis pas franchement alaise avec le langage C je n'es pas essayer ton bout de code car je ne comprend pas trop ce que tu a voulu dire.

    @Paul
    Oui.... excellent ça fonctionne a merveille, et si ça ne t’ennuie pas trop de me le commenter
    serais fortement utile pour comprendre le mécanisme car j’ai bien vu que tout le code a changer mais sans pour autant comprendre.
    Je me suis inscrit sur circuit.io, mais ça a tendance a planter mon navigateur (Firefox).

    @jpbbricole
    Merci pour le lien et la bibliothèque, pour l'installer ça je sais faire, il faut bien que j'arrive a faire quelque chose tout seul avec Arduino:lol:.
    J'essaierais ton code demain, il se fait tard et je n'ai plus d'aspirine:mrgreen:.
    Il y a une chose qui me turlupine, a lire ton code et celui de Paul il ne se ressemble absolument pas pour un même résultat, le C c'est déjà pas facile, alors si chacun peu y faire sa recette ca va ce compliqué.

    Un grand merci a vous tous pour m'avoir aidé a faire avancé le smilblik, du coup je me sent moins seul avec mes petits carte Arduino.

    Bonne fin de soirée.
    @+
     
  12. jpbbricole

    jpbbricole Ouvrier

    Messages:
    443
    Inscrit:
    26 Mai 2016
    Localité:
    Corsier-sur-Vevey (Vaud)
    Département:
    1804
    Besoin de conseils pour programation Arduino
    Salut Mandrak
    Racheté des aspirines?

    C'est ce qui fait le charme de la chose, d'ici peu tu pourras faire tes propres recettes et devenir, qui sait, un nouveau bocuse de la chose!

    Voici une version un peu plus aboutie:
    Code:
    //http://playground.arduino.cc/Code/Button
    
    #include <Button.h>
    
    #define boutonMonterPin 6
    #define boutonDescendrePin 7
    
    #define led_0_pin  8 //24
    #define led_1_pin  9 //26
    #define led_2_pin  10 //28
    
    Button boutonMonter = Button(boutonMonterPin,PULLUP);            // Paramétrage de la librairie Button.h
    Button boutonDescendre = Button(boutonDescendrePin,PULLUP);         
    
    #define nombreDeLeds 3
    int compteurPas;
    
    #define ledOn true  
    #define ledOff false
    
    void setup()
    {
        pinMode(led_0_pin, OUTPUT);
        pinMode(led_1_pin, OUTPUT);
        pinMode(led_2_pin, OUTPUT);
      
        compteurPas = 0;
    
        Serial.begin(9600);
        delay(200);
    
        Serial.println("Demo button.h");
    }
    
    void loop()
    {
        if(boutonMonter.uniquePress())
        {
            compteurPas ++;
            affichageLeds();
        }
        if(boutonDescendre.uniquePress())
        {
            compteurPas --;
            affichageLeds();
        }
    }
    
    void affichageLeds()
    {
        boolean led_0_etat, led_1_etat, led_2_etat;
      
        if (compteurPas > nombreDeLeds)    {compteurPas = nombreDeLeds;}
        if (compteurPas < 0) {compteurPas = 0;}
      
        switch (compteurPas)
        {
            case 0:
                Serial.println("  -  -  ");
                led_0_etat = ledOff, led_1_etat = ledOff, led_2_etat = ledOff;
                break;
            case 1:
                Serial.println("L1-  -  ");
                led_0_etat = ledOn, led_1_etat = ledOff, led_2_etat = ledOff;
                break;
            case 2:
                Serial.println("L1-L2-  ");
                led_0_etat = ledOn, led_1_etat = ledOn    , led_2_etat = ledOff;
                break;
            case 3:
                Serial.println("L1-  -L3");
                led_0_etat = ledOn, led_1_etat = ledOff, led_2_etat = ledOn;
                break;
        }
      
        digitalWrite(led_0_pin, led_0_etat);
        digitalWrite(led_1_pin, led_1_etat);
        digitalWrite(led_2_pin, led_2_etat);
    }
    
    Bonne journée
    jpbbricole
     
  13. vibram

    vibram Compagnon

    Messages:
    783
    Inscrit:
    15 Mars 2014
    Besoin de conseils pour programation Arduino
    Voila de quoi comprendre un peu mieux
    Code:
    
    int led1 = 10; // premiere LED
    int led2 = 9; // deuxieme LED
    int led3 = 8; // troisieme LED
    int pb1 = 2; // bouton poissoir 1, attention à mettre sur un GPIO compatible attach interrupt, voir ici: https://www.arduino.cc/en/Reference/AttachInterrupt
    int pb2 = 3; // bouton poussoir 2, idem
    int pbS1 = 0; // etat du bouton poussoir 1
    int pbS2 = 0; // etat du bouton poussoir 2
    int led1S = 0; //compteur pour l'allulamge
    int led2S = 0; //compteur pour l'extinction
    
    
    
    void setup() {
      pinMode(led1, OUTPUT); // LED1 en output
      pinMode(led2, OUTPUT); // LED 2 en output
      pinMode(led3, OUTPUT); // LED3 en output
      pinMode(pb1, INPUT_PULLUP); //BP en input pull up sinon l'attach interrupt ne fonctionne pas
      pinMode(pb2, INPUT_PULLUP); //BP en input pull up sinon l'attach interrupt ne fonctionne pas
      attachInterrupt(digitalPinToInterrupt(pb1), bouton1, RISING); // Ici on dit: si lecture du bouton poussoir1 (digitalpintointerrupt(pb1), alors on lance le loop bouton1 lorsque la valeur du bouton est MONTANTE (de Low à HIGH). L'avantage c'est que le microcontrolleur ne va pas faire de loop, il va juste faired l'action s'il détecte un changement. C a l'avantage de laisser plus de ressource et surtout de ne pas être bloquant: pendant ce temps il peut faire autre chose
      attachInterrupt(digitalPinToInterrupt(pb2), bouton2, RISING); // pareil mais pour le BP 2, n lance bouton2 lorsqu'on appuie sur le bouton
      // Serial.begin(9600); //inutile dans le projet final, c'était pour "debugger" lorsque j'écrivais le code
    }
    
    void bouton1(){
      cli(); //icvi cette fonction sert à bloquer d'autre attachinterrupt qui pourrait s'effectuer en meme temps
      pbS1 = digitalRead(pb1); //lecture de l'état du bouton 1
       // Serial.print("led1S:");
      // Serial.println(led1S);
      if(pbS1 == HIGH) // si bouton 1 enfoncé
        {
      digitalWrite(led1, HIGH); //on allume les LED selon ce que tu as spécifié
      digitalWrite(led2, LOW);
      digitalWrite(led3, LOW);
        }
      if((pbS1 == HIGH) && (led1S == 1)) //si bouton 1 enfoincé et compteur des LED1 = 1, alors on allume les LED spécifié lors du second appui
        {
       digitalWrite(led1, HIGH);
      digitalWrite(led2, HIGH);
      digitalWrite(led3, LOW);
        }
       if((pbS1 == HIGH) && (led1S == 2)) //si bouton 1 enfoincé et compteur des LED1 = 2, alors on allume les LED spécifié lors du second appui
        {
       digitalWrite(led1, HIGH);
      digitalWrite(led2, LOW);
      digitalWrite(led3, HIGH);
        }
      if((pbS1 == HIGH) && (led1S > 2)) //si bouton 1 enfoincé et compteur des LED1 > 2, alors on ne fait rien, car tu n'as rien spécifié dans ce cas
        {
       digitalWrite(led1, HIGH);
      digitalWrite(led2, LOW);
      digitalWrite(led3, HIGH);
        }
      led1S ++; //A la fin de chaque boucle bouton1, on incremente de 1 afin de savoir combien de pression on a effectué sur le BP
      led2S = 0; //on remet l'état des led2 à 0 comme on est pas censé appuyé sur le bouton 2 entre temps
      }
    
      void bouton2() //la boucle est exactement la meme mais pour le bouton 2 et les LED dans l'ordre inverse comme spécifié
      {
      cli();
      pbS2 = digitalRead(pb2);
      // Serial.print("led2S:");
      // Serial.println(led2S);
      if(pbS2 == HIGH)
        {
      digitalWrite(led1, HIGH);
      digitalWrite(led2, HIGH);
      digitalWrite(led3, LOW);
        }
      if((pbS2 == HIGH) && (led2S == 1))
        {
       digitalWrite(led1, HIGH);
      digitalWrite(led2, LOW);
      digitalWrite(led3, LOW);
        }
       if((pbS2 == HIGH) && (led2S == 2))
        {
       digitalWrite(led1, LOW);
      digitalWrite(led2, LOW);
      digitalWrite(led3, LOW);
        }
      if((pbS2 == HIGH) && (led2S > 2))
        {
       digitalWrite(led1, LOW);
      digitalWrite(led2, LOW);
      digitalWrite(led3, LOW);
        }
      led2S ++;
      led1S = 0;
      }
    
    void loop() {
    }
    en esperant t'avoir aidé un peu !
     
  14. Mandrak

    Mandrak Apprenti

    Messages:
    96
    Inscrit:
    30 Janvier 2015
    Localité:
    Le Sud
    Besoin de conseils pour programation Arduino
    Bonjour a tous

    @Paul
    Merci pour tes commentaires, j'ai a peu près tout compris, il reste cependant une zone obscure, attachInterrupt, RISING, et cli, je vais me documenter.
    Il y a une variante entre ton code et celui je jppbbricole, hier je me suis un peu enflammer, tout content de voir qu'enfin il sortais de cette carte quelque chose dont j'avais besoin pour mon projet,
    après avoir tester plus en détail, il y a une fonction qui fonctionne pas comme je l'aurais souhaité ,
    j'explique:
    tout va bien a la monté, led1on, led1on+led2on, led2off+led3on, quand on fait l'inverse aussi mais uniquement dans cette ordre, quand je suis dans la période de descente et a l’état led1on+led2on et que je veut remonter a l’état led1off+led3on je suis obligé de presser deux fois le bouton monter pour changer d’état.
    J’espère ne pas être trop confus dans mon explication.

    @jpbbricole
    j'ai essayer ton code, la version plus aboutie, c'est tout a fait ce qu'il me faut, ca fonctionne très bien, j'ai décortiqué le code afin de comprendre le fonctionnement, la j'ai plus de mal a pigé, le code de Paul est pour mon niveau plus clair, je met en Pj ton code que j'ai commenter avec divers interrogations.
    Entre temps et deux tube d'aspirine plus loin, j'ai pris une cours sur le langage C sur le site OpenClassrooms, ça commence a renter dans mon neurone, la ou j'ai encore du mal c'est sur la structure ou hiérarchie du programme, c'est la patauge.
    Je compte faire évolué mon projet en y rajoutant une centrale clignotant toujours a l'aide de deux bouton poussoir supplémentaire,je vais essayer de faire le code comme un grand, histoire de voir si j'ai tout bien compris.

    A suivre.

    Cordialement
    Code:
    //http://playground.arduino.cc/Code/Button
    
    #include <Button.h>              //on inclus la bibliotheque dans le programme
    
    #define boutonMonterPin 7        // Definition des entrees de la carte (Pourquoi #define au lieu de ins ou char ??)
    #define boutonDescendrePin 6
    
    #define led_0_pin  24            // Definition des pin sorti des led
    #define led_1_pin  26
    #define led_2_pin  28
    
    Button boutonMonter = Button(boutonMonterPin,PULLUP);            // Paramétrage de la librairie Button.h
    Button boutonDescendre = Button(boutonDescendrePin,PULLUP);        
    
    #define nombreDeLeds 3          // ??? la je seche
    int compteurPas;
    
    #define ledOn true               // es ce pas equivalent a 1 a la place de true?
    #define ledOff false             // es ce pas equivalent a 0 a la place de true?  
    
    void setup()
    {
        pinMode(led_0_pin, OUTPUT);  //On dit que ce sont des sorti
        pinMode(led_1_pin, OUTPUT);
        pinMode(led_2_pin, OUTPUT);
     
        compteurPas = 0;             //on initialise le compteur compteur pas??
    
        Serial.begin(9600);          //ca je sais ce que c'est
        delay(200);                  // Pourquoi un delai ??
    
        Serial.println("Demo button.h"); //ca aussi je sais ce que c'est
    }
    
    void loop()     // la boucle, void !! veut bien dire vide ???
    {
        if(boutonMonter.uniquePress())  // si boutonMonter a une pression alors.   if est bien dans une fonction??
        {
            compteurPas ++;             // une fonction ?, compteurPas est incrementé de +1
            affichageLeds();            /* la il faut que tu me comfirme je ne suis pas sure de ce que je vais ecrire.
                                           C'est une variable qu tu crée sans parametre, () vide qui fait parti d'une fonction
                                           et qui est appeler par void affichageLeds()  ???*/                                 
        }
        if(boutonDescendre.uniquePress())
        {
            compteurPas --;
            affichageLeds();
        }
    }
    
    void affichageLeds()
    {
        boolean led_0_etat, led_1_etat, led_2_etat;  //variable booleene de l'etat des led, 1 si elles sont allumees, 0 si elles sont eteinte.
     
        if (compteurPas > nombreDeLeds) //si compteur pas est superieur a nombreDeLed
          {
          compteurPas = nombreDeLeds;   //fonction??, bon a partir de la ca commence a etre confut,    vite une aspirine...
          }
        if (compteurPas < 0)
          {
            compteurPas = 0;
          }
     
        switch (compteurPas)           // la j'ai besoin d'explication plus detailler
        {
            case 0:
                Serial.println("  -  -  ");
                led_0_etat = ledOff, led_1_etat = ledOff, led_2_etat = ledOff;
                break;
            case 1:
                Serial.println("L1-  -  ");
                led_0_etat = ledOn, led_1_etat = ledOff, led_2_etat = ledOff;
                break;
            case 2:
                Serial.println("L1-L2-  ");
                led_0_etat = ledOn, led_1_etat = ledOn    , led_2_etat = ledOff;
                break;
            case 3:
                Serial.println("L1-  -L3");
                led_0_etat = ledOn, led_1_etat = ledOff, led_2_etat = ledOn;
                break;
        }
     
        digitalWrite(led_0_pin, led_0_etat);  // la on eteint les led par l'appel de led_0_etat
        digitalWrite(led_1_pin, led_1_etat);
        digitalWrite(led_2_pin, led_2_etat);
    }
     
  15. vibram

    vibram Compagnon

    Messages:
    783
    Inscrit:
    15 Mars 2014
    Besoin de conseils pour programation Arduino
    attention quand tu tag "paul" c'est un autre utilisateur :wink:
    Comme a bien dit jpb, son code est nettement plus propre, moi il aboutit au résultat que du m'a indiqué. Maintenant que ta volonté se complique un peu, il faut voir si le code peut s'adapter, pas si evident que cela à faire !

    Tu as des infos ici pour le attachinterrupt:
    http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.AttachInterrupt

    je te conseille donc de partir sur le code de jpb, meme si je vais voir si j'arrive à adapter le mien pour le fun
     
Chargement...
Articles en relation
  1. JCS
    Réponses:
    28
    Affichages:
    1 089

Partager cette page