IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Problème LED + bouton sur I2C


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2017
    Messages : 41
    Par défaut Problème LED + bouton sur I2C
    Bonjour à tous,

    Je viens ici avec un léger problème. Sur mon expendeur I2C, j'arrive à faire clignoter une LED que je souhaiterai rendre fixe après l'appui sur un bouton poussoir. En appuyant sur ce bouton, elle reste fixe tant que j'ai le doigt qui l'écrase, mais dès que je le relâche elle se remet à clignoter de plus belle. Que faire ?

    Merci d'avance !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #include <Adafruit_MCP23017.h>
     
     
    int memoire_ledb1 = LOW;
    int bouton_changeledb1 = false;
     
     
    void setup() {
     
    mcp.pinMode(0, OUTPUT); //LED
    mcp.pinMode(1, INPUT); // bouton
     
     
    mcp.digitalWrite(0, LOW);
     
    }
     
     void loop(){
     
      if(millis() - temps > 100)
            {
                etat_led = !etat_led; //on inverse l'état de la LED
                mcp.digitalWrite(0, etat_led); //on allume ou éteint
                temps = millis(); //on stocke la nouvelle heure
            }
     
     
    etat_bouton = mcp.digitalRead(1);
     
    if((etat_bouton != memoire_ledb1) && (etat_bouton == HIGH))
     
    {
      mcp.digitalWrite(0, HIGH);
     
    }
     
      bouton_changeledb1=false;
     
    }

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 278
    Par défaut
    Bonsoir

    Citation Envoyé par ochey54 Voir le message
    En appuyant sur ce bouton, elle reste fixe tant que j'ai le doigt qui l'écrase, mais dès que je le relâche elle se remet à clignoter de plus belle.
    Cela correspond à ce que tu as programmé.
    Tes lignes 20 à 25 font clignoter ta led en permanence.
    Et quand le bouton est pressé la ligne 33 force l'état 0 (éteint ou allumé, je ne sais dire). Mais la partie de code du clignotement continue à travailler.

    Citation Envoyé par ochey54 Voir le message
    Que faire ?
    Revoir ton algorithme

    Delias

  3. #3
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2017
    Messages : 41
    Par défaut
    Merci Delias pour ta réponse , mais je ne sais pas comment faire pour revoir l'algorithme... Ce n'est pas que je ne veux pas mais je ne sais comment le faire: quel code à appliquer ? A modifier ?

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 492
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 492
    Billets dans le blog
    1
    Par défaut
    Avant de penser à quel code il faut penser.....quel algorithme ? Écris-le en français et montre-nous ça

  5. #5
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2017
    Messages : 41
    Par défaut
    Bonsoir,

    Je vous joint donc un algorithme qui définit ce que je veux avoir sur mon montage.



    Nom : ALGORITHME.jpg
Affichages : 675
Taille : 114,2 Ko


    Ensuite, je vous renvoie une copie du code actuel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    #include <Wire.h>
    #include <Adafruit_MCP23017.h>
     
     
    int memoire_ledb1 = LOW;
    int bouton_changeledb1 = false;
    boolean etat_led;
    boolean etat_bouton;
     
    long temps;
     
     
    void setup() {
     
    mcp.pinMode(0, OUTPUT); //LED
    mcp.pinMode(1, INPUT); // bouton
     
     
     mcp.digitalWrite(0, LOW);
     
    }
     
     void loop(){
     
      if(millis() - temps > 100)
            {
                etat_led = !etat_led; //on inverse l'état de la LED
                mcp.digitalWrite(0, etat_led); //on allume ou éteint
                temps = millis(); //on stocke la nouvelle heure
            }
     
     
    etat_bouton = mcp.digitalRead(1);
     
    if((etat_bouton != memoire_ledb1) && (etat_bouton == HIGH))
     
    {
      mcp.digitalWrite(0, HIGH);
     
    }
     
      bouton_changeledb1=false;
      memoire_ledb1=true;
     
    }

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 492
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 492
    Billets dans le blog
    1
    Par défaut
    Merci pour le code qui est le même que juste au-dessus non ? ^^

    Ton code ne fait pas ce que ton algo, ou alors ton algo n'est pas clair. D'ailleurs, j'opte pour le "pas clair". Toi, tu ne veux pas regarder l'état du bouton, ce que fait ton code ; tu veux savoir si le bouton a été pressé (ce qui n'est pas la même chose que "est actuellement pressé"). Alors, un petit booléen wasPressed, initialisé à false et qui passe à true au bon moment, et roulez jeunesse !

Discussions similaires

  1. Problème d'évènement sur un bouton
    Par Rmodevv dans le forum ActionScript 3
    Réponses: 3
    Dernier message: 13/01/2009, 14h37
  2. Problème d'écouteur sur un bouton
    Par popy67 dans le forum Débuter
    Réponses: 1
    Dernier message: 29/10/2008, 16h56
  3. Problème de click sur un bouton
    Par Naruto_kun dans le forum C#
    Réponses: 2
    Dernier message: 26/09/2008, 16h27
  4. Problème d'action sur un bouton
    Par marypouss dans le forum Flash
    Réponses: 2
    Dernier message: 19/07/2007, 19h49
  5. Réponses: 3
    Dernier message: 21/08/2006, 11h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo