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 :

Basculer l'état d'une Led avec boutons poussoirs


Sujet :

Arduino

  1. #1
    Candidat au Club
    Femme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2016
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Basculer l'état d'une Led avec boutons poussoirs
    Bonjour,
    je suis actuellement sur la réalisation d'un projet sous arduino, cependant, je bloque à un certain point, le plus important...
    J'aimerai savoir le code nécessaire pour "reset" le programme.
    Je m'explique,
    Je veux qu'une Led s'allume, lorsqu'un bouton poussoir passe au NL 1, peu importe le nombre de fois que l'interrupteur est enclenché, la Led doit resté allumée dès la 1ère commande, j'aimerais donc par la suite, à l'aide d'un autre interrupteur, éteindre la Led (d'où le fait de "reset"), pour ensuite la re-déclencher dans le futur.
    Je n'ai pas vraiment l'idée pour construire ce programme.. Etant donné que je suis sur Arduino depuis seulement quelques semaines, je ne suis pas du tout au point à ce niveau la, si quelqu'un pourrais m'aider..
    Merci à vous !

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 605
    Points : 56 718
    Points
    56 718
    Billets dans le blog
    40
    Par défaut
    Bonjour,

    Si ce sont des boutons poussoirs à appui momentané, il faut détecter des fronts (bascule HIGH->LOW ou LOW->HIGH selon ton câblage).

    2 possibilités :
    - dans la boucle loop(), tu mémorises l'état du bouton et tu regardes par rapport à l'état précédent mémorisé s'il y a bascule ;
    - la détection d'un appui déclenche une interruption (cf. attachInterrupt()), évènement RISING OU FALLING.

    Attention aux phénomènes de rebonds dans le bouton.

  3. #3
    Candidat au Club
    Femme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2016
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Merci pour ta réponse, mais j'ai créer ce programme, je te montre ce qu'il fait lorsque je l'allume...
    Le bouton poussoir laisse passer le courant quand il est levé(Niveau 1) et empêche le passage quand on appuie dessus(Niveau 0).
    Quand la serrure est dans la position dans laquelle je peux enlever la clé (Niveau 1), le courant passe, si je ne peux pas enlever la clé, le courant ne passe pas(Niveau 0)

    Je veux donc, que la Led verte soit allumée, avec le Bouton Poussoir enfoncé (Niveau 0) avec la serrure en Niveau 1, et dès que le bouton poussoir est relevé, la lumière rouge s'allume. Pour reset le système, je suis censé tourner la serrure dans le Niveau 0.
    Il y a vraisemblablement un problème, mais je ne trouve pas.. Je cherche depuis hier, mais je n'arrive à rien, ci contre, le code, ainsi qu'une vidéo montrant le problème..

    (Je programme sur Arduino, avec une carte Arduino Uno)

    La vidéo du probleme : https://www.youtube.com/watch?v=_WHG...ature=youtu.be

    Nom : Screenshot_68.png
Affichages : 7580
Taille : 122,0 Ko

    Je laisse le code quand même en dessous :

    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
    const int IC=13;  //Déclaration des constantes et des variables
    const int BR = 11;
    const int led=8; //led verte
    const int led1=9; //led rouge
     
    int etatIC;
    int saveIC = 0; 
    int etatBR;
     
    void setup() 
    {
      pinMode(IC,INPUT);    // IC est une entrée  
      pinMode(BR, INPUT);   // BR est une entrée
      pinMode(led,OUTPUT);  // led est une sortie
      pinMode(led1,OUTPUT);  // led1 est une sortie
     
      Serial.begin(9600);   // initialisation du port de communication entre la carte arduino et le pc
    }
     
    void loop() 
    {
      etatIC = digitalRead(IC);  // "etatIC" prend la valeur du digitalRead(IC)
        if(etatIC == 1)      // Si le bouton n'est pas appuyé
          {  
            ++saveIC;          // Ajoute un à la variable "saveIC"
            Serial.println(saveIC);    // Affiche la valeur de "IC"
            delay(500);     // Recommence à chaque secondes
          }
     
        if(saveIC > 0)     // Si "saveIC" est supérieur à 0
          {
            digitalWrite(led, LOW);   //Eteinds la led
             digitalWrite(led1, HIGH);  // On allume la led
          }
     
     
     etatBR = digitalRead(BR);   // "etatBR" prend la valeur "digitalRead(BR)
      if(etatBR == 0)      // Si on appuis sur le bouton 
        {
         saveIC = 0;      // On réinitialise les variable
         delay(500);
         digitalWrite(led, HIGH);  // On allume la led
         digitalWrite(led1, LOW);  // On eteinds la led
        }
    }

    Merci beaucoup pour vos reponses...

  4. #4
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2015
    Messages : 19
    Points : 54
    Points
    54
    Par défaut
    désolé je ne peux pas lire les vidéos

    je suis pas tout a fait sure d'avoir tout compris dans la séquence

    tu as donc deux interrupteurs : un a clé et un bouton poussoir

    tu cherches une séquence :
    1. int clé a 0 bouton poussoir à 1 : aucunes lumières allumées ?
    2. si tu appuis sur le bouton poussoir (qui passe a 0) : la lumière verte s'allume
    3. quand tu le relaches (il repasse à 1) la lumière verte s'éteint ? et la rouge s'allume
    4. si tu rappuis sur le bouton poussoir : aucun effet tout reste dans l'état précédent
    5. quand l'interupteur à clés est à 1 : tout s'éteinds ?

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2015
    Messages : 19
    Points : 54
    Points
    54
    Par défaut

    ce que je vois du programme ne corresponds pas a la description de ce que je comprends

  6. #6
    Candidat au Club
    Femme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2016
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Je suis désolé si je suis pas clair, mais c'est difficile a expliquer clairement, je vais donc tout recommencer depuis le début (Je souhaite créer une alarme).
    Je veux que, le système se déroule comme cela à la base:
    "Bouton poussoir à 0(Enfoncé)" et "Int clé à 1(Je peux retirer la clé)" La lumière verte est allumée, la route éteint. (La porte est fermée donc appuie sur le BP, et la clé est enlevé de l'int, la lumière verte est allumée, aucune intrusion.)
    "Bouton poussoir à 1(Relaché)" et "Int clé à 1(Je peux toujours retirer la clé)" La lumière verte s'éteint, la rouge s'allume.(La porte a été ouverte, donc le BP a été relaché x fois, donc intrusion, la lumière rouge est allumée.)
    "Bouton poussoir à 1(Relaché)" et "Int clé à 1(Je peux toujours retirer la clé)" La lumière verte est toujours éteinte, la rouge reste allumée.(La porte a été refermée, donc le BP a été renfoncé x fois, donc intrusion, la lumière rouge reste allumé.)
    "Bouton poussoir à 0(Enfoncé)" et "Int clé à 0(J'ai tourné la serrure pour faire passer à 0, puis remis dans l'état 1 la clé, donc pour reset le système à la base)" La lumière verte s'allume, la rouge s'éteint.(Le propriétaire est venu dans la pièce vérifier si il y avait eu une intrusion, il a donc réinitialiser le système à la base pour indiquer qu'il était chez lui, et qu'il n'était pas un intru pour le système.)

    J’espère avoir été plus clair dans ce que j'aimerai que mon programme fasse...

    Merci encore.

  7. #7
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 605
    Points : 56 718
    Points
    56 718
    Billets dans le blog
    40
    Par défaut
    Bonjour,

    Rien compris

    Tu devrais t'intéresser à certains outils de description, chronogramme ou table de vérité entre autres.
    ça nous permettra d'en déduire une équation logique, facile à programmer.

    Si par exemple, un voyant rouge doit s'allumer seulement quand on appuie sur un bouton Bp1 et sur un bouton Bp2, l'équation logique est : Rouge = Bp1.Bp2, et en C un truc du genre : digitalWrite(pinRouge, EtatBP1 & EtatBP2).

  8. #8
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2015
    Messages : 19
    Points : 54
    Points
    54
    Par défaut
    je suis contente de savoir que je ne suis pas la seule à ne pas tout comprendre

    perso l'impression est que tu as trop "la tête dans le guidon", tu as commencé ton code sans le poser

    il y a très longtemps (dans les années 90, si si il y avait déjà des ordis) , ma prof d'informatique m'a dis que pour programmer le crayon et le papier était l'outil le plus important à avoir !!!

    plus sérieusement, je vois un peu ce que tu veux, mais comme l'a dis f-leb, il faut que tu revois la façon de penser le projet, si tu arrives à bien reformuler ton projet tu auras déjà la moitié de la solution

    par contre je connais pas bien arduino (oui j'ai ouvert la boite dimanche ) mais le delay si j'ai bien compris est une pause dans le programme et je ne suis pas sûre que ce soit une bonne idée (pour ce que je sais je suis une brèle et j'ai pas ou peu fait de prog depuis 20 ans )

  9. #9
    Candidat au Club
    Femme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2016
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Salut, merci pour vos réponses, en fait, le programme est en théorie juste, mais il a un problème de niveaux logiques entre les 0 et les 1 qui se baladent un peu partout, puis ce qu'il fonctionnait parfaitement la semaine dernière, et la je sais pas j'ai modifié quoi, mais impossible de le faire fonctionner correctement, toujours cette foutue boucle qui reviens... J'ai déjà créer un programme quelque peu similaire pour détecter l'ouverture du capot dans une boite aux lettres, qui fonctionne a merveille, mais la, impossible ? Je cherche surtout quelqu'un qui pourrait me donner des solutions à l'erreur possible qu'il pourrait y avoir dans le programme si possible... :/
    Merci à vous !

Discussions similaires

  1. [MySQL] Parcourir une requete avec bouton suivant et precedent
    Par Mut dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 03/02/2011, 14h45
  2. [PHP 5.2] récupération de l'état d'une checkbox avec un formulaire ?
    Par [ZiP] dans le forum Langage
    Réponses: 2
    Dernier message: 16/01/2009, 10h21
  3. Effacer une ligne avec bouton
    Par ptitepo dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 26/05/2008, 13h16
  4. Réponses: 3
    Dernier message: 06/06/2006, 17h38
  5. peut on rafraichir une page avec bouton radio?
    Par zorba49 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 06/06/2006, 12h33

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