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 :

Minuterie


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Février 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en sécurité

    Informations forums :
    Inscription : Février 2018
    Messages : 8
    Par défaut Minuterie
    Bonjour, nouveau sur arduino uno, je souhaite faire un programme réussi a moitié. En effet j'arrive a activer un relais en appuyant sur un bouton poussoir : après une impulsion du poussoir, le relais se ferme pendant 5s puis se remet au repos. Cependant comment je peux faire pour ajouter dans le programme que si je rappuie sur le poussoir avant la fin des 5s le décompte de la tempo repart de 5s automatiquement ? Merci

  2. #2
    Modérateur

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

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 282
    Par défaut
    Bonsoir Freddy et bienvenu sur DVP!

    C'est normalement simple, il suffit de réinitialisé le compteur temps lors d'une nouvelle pression sur le bouton poussoir. Après cela dépend de l'implémentation exacte. Par exemple, en cas d'utilisation d'un gros delay(5000); cela ne sera pas directement possible. Il faut utiliser le comptage de temps non bloquant comme indiqué dans le tutoriel Arduino: Blink Without Delay.

    Pour des réponses plus approfondie, il te faudra poster ton code.

    Delias

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Février 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en sécurité

    Informations forums :
    Inscription : Février 2018
    Messages : 8
    Par défaut
    Merci beaucoup, par contre dans votre code je ne vois pas les numéro des entrées sorties de la carte où je dois raccordé le bouton et le relais. Je possède une carte Uno avec une carte 8 relais. En réalité comment je peux faire un code pour gérer indépendamment plusieurs relais de la carte avec leurs poussoirs respectifs pour exactement la même fonction?

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


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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 202
    Billets dans le blog
    48
    Par défaut
    Bonsoir,

    Citation Envoyé par freeedy999 Voir le message
    par contre dans votre code je ne vois pas les numéro des entrées sorties de la carte où je dois raccordé le bouton et le relais.
    Mon code n'était que partiel pour donner une idée. Je ne connais pas ton matériel et le câblage. Un simple bouton et l'entrée peut être lue à l'état haut ou à l'état bas sur appui du bouton selon son montage, sans parler des problèmes de rebonds à gérer.... Tout comme la commande des relais, sans référence du matériel ou schéma de câblage, c'est difficile de répondre.

    Il est sûr que mon do...while précédent est bloquant si tu dois regarder d'autres boutons et relais.

    Mais dans l'idée, avec un seul bouton/relais cela donnerait dans la boucle loop() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void loop() {
      bp1 = digitalRead(bpPin1);
     
      if (bp1){ // si bouton appuyé
          digitalWrite(relayPin1, HIGH); // activer le relais
          topDepart1=millis();
        }
     
      if ((millis()-topDepart1)>=5000 && digitalRead(relayPin1)){ // si temps écoulé et relais actif
          digitalWrite(relayPin1, LOW);
        }
     
    }
    Après il faut que tu testes et que tu postes ton code en cas de souci...

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Février 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en sécurité

    Informations forums :
    Inscription : Février 2018
    Messages : 8
    Par défaut Merci
    Bonjour, ok je comprends. , par contre n'ayant aucune base je ne serais quoi mettre avant votre code....... Mon système est le suivant: j'ai une carte UNO et une carte relais . J'ai câblé un bouton poussoir 1 sur entrée pin2 et un bouton poussoir 2 sur entrée pin3. Un relais 1 sur sortie pin13 et un relais 2 sur sortie pin12. Le but si j'appuie sur bp1 , fermeture pendant 5s du relais 1 puis réouverture , même chose avec bp2 et relais 2. Et enfin si il y a un appui de bp1 avant la fin des 5s le compteur repart de 5s automatiquement sur le relais 1 , et si il y a un appui sur bp2 avant la fin des 5s le compteur repart de 5s sur le relais 2. Merci pour votre aide ...

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Février 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en sécurité

    Informations forums :
    Inscription : Février 2018
    Messages : 8
    Par défaut fonctionne un peu
    Bonjour voici une copie du code qui fonctionne environ 1 min , mais je ne sais pas pourquoi au bout d'un moment ça plante , lorsque j'appuie sur le poussoir plus rien ne se passe....


    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
    /*
     
    */
    const int bpPin1 = 2;// numéro position bp1
    const int relayPin1 =  13;      // numéro position relay1
     
    // variables will change:
    int bp1 = 0;         // j'ai mis cela car sinon il me met un message d'erreur de non déclaration dans le scope
    int topDepart1=0;  // j'ai mis cela car sinon il me met un message d'erreur de non déclaration dans le scope
     
    void setup() {
      // sortie relay:
      pinMode(relayPin1, OUTPUT);
      // entrée bp:
      pinMode(bpPin1, INPUT);
    }
     
    void loop() {
       bp1 = digitalRead(bpPin1);
     
      if (bp1){ // si bouton appuyé
          digitalWrite(relayPin1, HIGH); // activer le relais
          topDepart1=millis();
        }
     
      if ((millis()-topDepart1)>=3000 && digitalRead(relayPin1)){ // si temps écoulé et relais actif
          digitalWrite(relayPin1, LOW);
        }
     
    }

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


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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 202
    Billets dans le blog
    48
    Par défaut
    Bonsoir,

    Peut-être avec long int topDepart1=0;.

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


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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 202
    Billets dans le blog
    48
    Par défaut
    Salut,

    en gérant un chrono avec la fonctionmillis() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    digitalWrite(relayPin, HIGH);  // fermeture du relais
      topDepart = millis();
     
      do {
        bp = digitalRead(bpPin);  // lire état du bouton
        if (bp) {  // si bouton appuyé
          topDepart = millis(); // on remet le chrono à zéro
        }
        delay(50);
      } while ((millis() - topDepart) < 5000); // tant que durée < 5s
     
      digitalWrite(relayPin, LOW); // ouverture du relais

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Février 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en sécurité

    Informations forums :
    Inscription : Février 2018
    Messages : 8
    Par défaut besoin encore d'aide
    Bonjour merci pour votre réponse,

    Je suis vraiment trop nouveau et j'arrive pas., je déprime devant mon ordi ( je fais un copier coller de ce que vous m'avez mis et j'ai des messages d'erreur)....
    Est ce que vous pourriez me faire le code complet que je dois mettre en mettant 2 relais et 2 Bp dans le même programme car j'ai une carte arduino uno avec une carte relais separée. Chaque Bp commande 1 relais respectif avec une tempo de fermeture de 5s après impulsion avec votre système de chrono millis pour réinitialisé le chrono de 5s si rappui sur 1 Bp.

    j'utilise les entrées pin 2 et 3 de l'arduino pour les poussoirs et les sorties pin 12 et 13 pour les relais

    Je vous remercie d'avance,

    freddy

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Macro et minuterie
    Par jeanchcom dans le forum Access
    Réponses: 3
    Dernier message: 30/05/2017, 11h06
  2. Champ date avec minuterie
    Par Daniel MOREAU dans le forum VBA Access
    Réponses: 3
    Dernier message: 01/11/2007, 21h32
  3. Minuterie décalée
    Par arnaucobra dans le forum Access
    Réponses: 1
    Dernier message: 17/10/2006, 15h06
  4. [VBA-E]fenetre pop-up à minuterie et toujours au premier plan
    Par Ania dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 16/10/2006, 14h49
  5. Problème minuterie vs. scanf
    Par lhulard dans le forum C
    Réponses: 1
    Dernier message: 10/04/2006, 13h51

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