Auteur Sujet: y a t'il un programmeur dans l'avion?  (Lu 23201 fois)

dudule

  • Newbie
  • *
  • Messages: 20
    • Voir le profil
y a t'il un programmeur dans l'avion?
« le: mars 14, 2016, 10:09:29 pm »
bonsoir
bon cela fait pas mal de jours que je galère et je n'arrive pas à trouver d'explications sur tous les forums que j'ai visité, alors je viens voir si quelqu'un peut me donner la solution ( j'ai l'impression que l'arduino ne sais faire que du clignotement)
voila je vous expose mon problème .
je ferme un contact qui met une entrée à 1 ce qui a pour effet de mettre une sortie à 1 et de démarrer une tempo.en fin de tempo je remet la sortie à 0 . je précise que cela doit fonctionner même si le contact reste fermé . le cycle ne se répète que si le contact  a été ouvert puis refermé  :'(
merci à ceux qui pourront m'aider
se faire aider pour avancer et avancer pour pouvoir aider

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1714
    • Voir le profil
Re : y a t'il un programmeur dans l'avion?
« Réponse #1 le: mars 14, 2016, 11:31:26 pm »
Bonsoir,

Il y a plusieurs aspects.

Tout d'abord ce qui t'intéresse dans ton contact ce n'est pas son état, 0 ou 1 mais son changement d'état, en l'occurrence de 0 à 1. Comme c'est le changement d'état qui t'intéresse, il faut généralement faire attention aux rebonds du contact qui vont produire plusieurs changement d'état. Mais dans ton cas, comme tu démarres une temporisation, les rebonds ne seront pas vu car je suppose que les changement d'état ne t'intéressent que si la temporisation n'est pas démarrée. Mais bon, abondance de bien ne nuit pas

Quoiqu'il en soit, le mieux est d'utiliser une bibliothèque pour lire ton contact. Par exemple Bounce2 qui va traiter les rebonds et qui s'occupe également des changements d'états. https://github.com/thomasfredericks/Bounce2/archive/master.zip

Classiquement, on inclut la bibliothèque :

#include <Bounce2.h>

La seconde chose est d'instancier un objet Bounce pour le contact :

Bounce contact;

Puis dans setup, de programmer la broche en entrée et de lier cet objet à cette broche, supposons que ça soit le broche 2. Note que comme ton contact connecte la broche à 5V, il faut une résistance (47kΩ) pour tirer la broche à GND quand le bouton contact n'est pas établi. Si le contact connectait la broche à GND, tu pourrais employer les résistances pullup intégrées à l'Arduino et avoir un montage plus simple) :

  pinMode(2, INPUT);
  contact.attach(2);

Ensuite dans loop, il faut appeler update pour que l'objet contact face son travail :

  contact.update();

Ensuite ce qui t'intéresse c'est le passage de 0 à 1 de ton entrée. Pour cela il faut appeler rose (de monter ou s'élever : rise, rose, risen) qui renvoit un booleen vrai si une montée, passage de 0 à 1 est détectée :

if (contact.rose()) {
  // lancer la tempo
}

Je suppose que si pendant qu'il y a une tempo de lancée, le contact est coupé puis rétabli, cela doit être ignoré. Il faut donc une variable d'état pour indiquer que la tempo est lancée. Appelons cette variable, un booléen, tempoEnCours. Il faut maintenant récupérer la date courante, via millis() et et la stocker dans une variable dateDebutTempo. On va ensuite à chaque tour de loop, relire la date courante avec millis et, quand cette date courante — dateDebutTempo devient supérieur à la durée de la tempo, on remet tempoEnCours à false et on remet la sortie à 0. Ça donne ça :

#include <Bounce2.h>

Bounce contact;
const byte pinContact = 2;
const byte pinSortie = 3;

void setup() {
  contact.attach(pinContact, INPUT);
  pinMode(pinSortie, OUTPUT);
  digitalWrite(pinSortie, LOW);
}

bool tempoEnCours = false;
unsigned long dateDebutTempo;
const unsigned long dureeTempo = 3000;

void loop() {
  contact.update();

  if (contact.rose() && ! tempoEnCours) {
    // lance la tempo
    tempoEnCours = true;
    dateDebutTempo = millis();
    digitalWrite(pinSortie, HIGH);
  }

  if (tempoEnCours) {
    unsigned long dateCourante = millis();
    if (dateCourante - dateDebutTempo > dureeTempo) {
      tempoEnCours = false;
      digitalWrite(pinSortie, LOW);
    }
  }
}

C'est non testé mais je pense que ça va marcher.
Cordialement

dudule

  • Newbie
  • *
  • Messages: 20
    • Voir le profil
Re : y a t'il un programmeur dans l'avion?
« Réponse #2 le: mars 15, 2016, 08:38:03 pm »
merci Jean-Luc pour ta réponse.
je vais voir de mettre en application,  je n'avais pas précisé mais c'est bien que tu m'ais proposé une solution avec millis ,plutôt que delay.
A+ Gérard   
se faire aider pour avancer et avancer pour pouvoir aider

dudule

  • Newbie
  • *
  • Messages: 20
    • Voir le profil
Re : y a t'il un programmeur dans l'avion?
« Réponse #3 le: mars 15, 2016, 08:57:22 pm »
Re moi.
après chargement du programme, j'ai ( erreur de compilation ) je vais voir si je trouve le cafard


Aucun fichier ou répertoire de ce noArduino : 1.6.7 (Windows 7), Carte : "Arduino/Genuino Uno"




fatal error: bounce2.h: No such file or directory              { apparemment il n'y a pas de fichier de ce nom }?

 #include <bounce2.h>

                     ^

compilation terminated.

exit status 1
Erreur lors de la compilation.m < bounce2.h >
« Modifié: mars 15, 2016, 09:15:16 pm par dudule »
se faire aider pour avancer et avancer pour pouvoir aider

dudule

  • Newbie
  • *
  • Messages: 20
    • Voir le profil
Re : y a t'il un programmeur dans l'avion?
« Réponse #4 le: mars 15, 2016, 09:52:59 pm »
bon si j'ai bien compris, cette bibliothèque manque dans mon IDE; reste plus qu'a la trouver
se faire aider pour avancer et avancer pour pouvoir aider

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1714
    • Voir le profil
Re : y a t'il un programmeur dans l'avion?
« Réponse #5 le: mars 15, 2016, 09:54:41 pm »
Bonsoir,

2 choses :

1) as tu installé la bibliothèque Bounce2 ? J'ai donné le lien en début de message
2) si oui, le B de Bounce doit être en majuscule.
Cordialement

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 810
    • Voir le profil
Re : y a t'il un programmeur dans l'avion?
« Réponse #6 le: mars 15, 2016, 11:45:47 pm »
Normalement, installer une bibliothèque est devenu aussi simple que de brancher une Zoé... Il suffit dans l'IDE Arduino de lancer l'option 'Croquis/Inclure une bibliothèque/Ajouter la bibliothèque Zip', et lui donner le Zip téléchargé grâce au lien de Jean-Luc, et c'est fait !

dudule

  • Newbie
  • *
  • Messages: 20
    • Voir le profil
Re : y a t'il un programmeur dans l'avion?
« Réponse #7 le: mars 16, 2016, 09:52:12 am »
bonjour
bien entendu, comme d’habitude je suis allé un peu trop vite et j'ai zapper le lien.
merci Jean-Luc   
pour thierry  OK pour le renseignement ,mais j'ai déjà fait la manip pour d'autres bibliothèques, merci tout de même
A+ Gérard
se faire aider pour avancer et avancer pour pouvoir aider

dudule

  • Newbie
  • *
  • Messages: 20
    • Voir le profil
Re : y a t'il un programmeur dans l'avion?
« Réponse #8 le: mars 16, 2016, 11:58:33 am »
enfin!j'ai mon bloc tempo à l'enclenchement , çà fonctionne .
merci à vous deux
Gérard
se faire aider pour avancer et avancer pour pouvoir aider