Arduino UNO etc : Introduction aux interruptions - Détection un appui sur un bouton poussoir avec IT

Sdílet
Vložit
  • čas přidán 28. 08. 2024

Komentáře • 69

  • @user-bk3ze5jz3n
    @user-bk3ze5jz3n Před rokem

    Bonjour Eric,
    Tous mes respects.
    Très bon pédagogue et passionné par ce qu'il fait.
    Cordialement.
    Jean-Luc.

  • @antoinedevos3765
    @antoinedevos3765 Před 3 lety +1

    Merci Monsieur Peronnin pour cette vidéo. Arduino me parle beaucoup plus que les pages Web, le WiFi, etc.
    J'adore vos vidéo. C'est votre façon d'expliquer avec un (ou plusieurs) exemple concret.
    Par contre, je n'ai pas bien capté la déclaration de la variable en "Volatile". Je ne l'ai jamais utilisé car je ne connaît ce type de déclaration.
    Pouce en l'air, comme d'habitude, bien sûr.
    À très bientôt pour une autre vidéo.

    • @EricPeronnin
      @EricPeronnin  Před 3 lety +2

      Lorsque vous utilisez une variable dans des fonctions qui ne sont pas liées entre elles (ici, la fonction loop n'appelle jamais la fonction ISR_BP et réciproquement), le compilateur peut être amené à simplifier le code et faire disparaitre les évolutions d'une variable qui change en dans une autre fonction. La déclaration volatile oblige le compilateur à lire la valeur stockée en mémoire et non celle dont il peut disposer dans un de ces registres internes.

    • @antoinedevos3765
      @antoinedevos3765 Před 3 lety

      @@EricPeronnin C'est tout de suite plus clair pour moi.
      Merci d'avoir répondu avec précision. Merci pour toutes vos vidéo si bien expliquée.
      À très bientôt.

  • @philippeguitton6670
    @philippeguitton6670 Před 2 lety +1

    Bravo, vos vidéos sont pertinentes et fort bien réalisées ! MERCI !

  • @philippe5394
    @philippe5394 Před 3 lety +2

    Bonsoir Eric,
    je découvre votre chaîne, via un lien de la chaîne d'Heliox. Je viens de regarder cette vidéo d'introduction aux interruptions. C'est un délice! J'adore votre approche pédagogique, votre méthode et les aides visuelles mises en oeuvre, le rythme aussi. Moi ça me va bien, je vais passer de bons moments, car je suis également fan d'Arduino, de Raspberry. Merci à vous, merci pour cette belle pédagogie. Bonne continuation..........

    • @EricPeronnin
      @EricPeronnin  Před 3 lety

      Merci Philippe

    • @philippe5394
      @philippe5394 Před 3 lety +1

      @@EricPeronnin Eric, pour répondre à votre question, Héliox a mis un lien vers votre chaîne sous sa dernière vidéo, à savoir "Réalisations hors caméra : on teste des choses !" En plus du lien, elle en parle de vous dans la vidéo.
      Bonne journée,

    • @EricPeronnin
      @EricPeronnin  Před 3 lety

      @@philippe5394 Merci Philippe. Je suis allé voir. C'est vraiment chouette de sa part.

  • @jccr-mipmoi1599
    @jccr-mipmoi1599 Před 3 lety +2

    Très bien comme toujours ! Vivement la suite !

  • @julienlogeard
    @julienlogeard Před 2 lety +1

    C'est ma première video chez vous et je me suis régalé. Des vieux souvenirs (positifs) de l'IUT et de mon prof d'automatisme. Merci mec t'es cool!

  • @fabricemotard4312
    @fabricemotard4312 Před 3 lety +3

    Encore une très bonne vidéo ! Je vais bien suivre cette série ! 😁 Un 👍 supplémentaire pour la série sur kucadque je viens de regardé complètement et j'ai appris beaucoup de choses que je ne connaissais pas encore merci pour toute vos vidéos vraiment très instructives !! 👏👏😉

  • @jck7398
    @jck7398 Před 3 lety +1

    Bonjour
    Je croyais qu'il n'y avait que les plus de 70 ans, contemporains du MITRA 15 ou équivalent, qui employaient le terme "IT". Blague à part, excellente introduction au vaste sujet que sont les interruptions (j'ai regardé celle-ci après avoir visionné les suivantes).

  • @freeeflyer
    @freeeflyer Před 3 lety +1

    J'avais jamais essayé les int sur arduino. Merci pour le tuto..

  • @EclisiaSong
    @EclisiaSong Před 3 lety +1

    Encore bravo Eric pour cette très très bonne vidéo.

  • @jfmahe1407
    @jfmahe1407 Před 3 lety +1

    Super ! Très clair.

  • @gilleshenri9529
    @gilleshenri9529 Před 3 lety

    comme dab joli court simple et concis

  • @Victurf
    @Victurf Před 3 lety +1

    Merci beaucoup!

  • @pascaldegenne4002
    @pascaldegenne4002 Před 2 lety +1

    Bonjour Eric,
    Je suis votre chaîne avec grand intérêt ces dernières années depuis que je suis en retraite.
    Je ne comprends pas votre programme de debounce du Bouton Poussoir.
    Vous sauvegarder l'instant PrecedentIT en sortant de la fonction. Mais vous la réinitialiser à l'entrée dans la fonction.

    • @EricPeronnin
      @EricPeronnin  Před 2 lety

      Bonjour Pascal. La variable PrecedentIT est une variable static. Cela signifie que l'initialisation ne se fait qu'à la première exécution de la fonction dans laquelle elle se trouve. Pour les autres itérations de la fonction, la variable conserve la valeur qu'elle avait à l'itération précédente.

    • @pascaldegenne4002
      @pascaldegenne4002 Před 2 lety

      @@EricPeronnin Merci pour votre réponse. C'est clair. Je n'avais pas saisi la notion de variable static.

  • @laurent9288
    @laurent9288 Před 3 lety +1

    Super ! On attend la partie 2 :-)

  • @sylvainmasson4457
    @sylvainmasson4457 Před 3 lety +2

    Un autre vidéo avec des explications bien claires. J’ai un petit souci cependant. Puisque nous travaillons avec un microcontrôleur 8 bit ici et que la variable compteurBP est sur 16 bit (donc deux accès 8 bit), avant d’imprimer cette variable dans la fonction loop(), la variable compteurBP devrait être copiée dans un variable temporaire en désactivant les interruptions pour éviter que ISR_BP() soit exécuter juste entre les deux accès 8 bit.

    • @EricPeronnin
      @EricPeronnin  Před 3 lety

      Oui, vous avez raison. La variable étant volatile, je pensais que le compilateur pouvait le gérer en procédant lui même à la désactivation/réactivation des IT mais ce n'est pas le cas et c'est donc au programmeur de désactiver les IT, copier la variable, réactiver les IT. C'est d'ailleurs ce qui est fait pour les fonctions millis() et micros().

  • @mohamedsalemfdahi3443
    @mohamedsalemfdahi3443 Před 3 lety +1

    Formidable job please série sur raspberry pi 4 Merci en avance votre Channel est top

    • @EricPeronnin
      @EricPeronnin  Před 3 lety +1

      Je suis totalement sec sur le raspberry pi. Qu'attendez-vous comme genre de tuto sur lui ?

    • @antoinedevos3765
      @antoinedevos3765 Před 3 lety

      @@EricPeronnin Est-ce que Raspberry n'est pas de la même trempe que Arduino (en plus complet et plus rapide bien sûr) ?

    • @JoeLaFrite
      @JoeLaFrite Před 3 lety

      @@antoinedevos3765 Arduino et Raspberry n'ont rien à voir. Raspberry est un ordinateur sur carte simple (mémoire, proc, périphérique) qui possède un système d'exploitation (Linux, Windows...). Arduino est un microcontrôleur avec des capacités beaucoup plus limitées et qui ne peut donc pas faire tourner un système d'exploitation classique.
      La particularité du Raspberry est qu'il possède des ports GPIO directement accessible. Il faut juste considérer ces ports comme un périphérique classique (carte son, vidéo, souris, clavier...) avec son driver géré par l'OS.
      Dans un Arduino, on accède directement au ports IO

  • @JoeLaFrite
    @JoeLaFrite Před 3 lety +1

    Bonjour, merci pour la vidéo, elle est vraiment bien faite. Et j'apprécie le fait de ne pas couper au montage les petits moments de galère (problème du terminal par exemple). On rencontre nous aussi forcément un moment ou un autre ce genre de problème.
    Question sur le define. Je n'ai pas vraiment compris la nuance entre utiliser un #define et une constante. Vous parlez de l'intitulé...

    • @EricPeronnin
      @EricPeronnin  Před 3 lety

      Bonjour et merci pour le commentaire.
      Je ne fais aucun montage : tout est enregistré en 1 prise (enfin, je recommence parfois plusieurs fois avec que la prise soit bonne). Même en procédant ainsi, je gagne du temps car le montage c'est rapidement chronophage.
      Si vous regardez les codes proposés par les ingés d'application des fabricants de composants, ils utilisent la plupart du temps des #define. J'en fais un usage important aussi. Il y a un inconvénient, c'est que la définition peut aboutir à un remplacement dans le code dans des noms différents mais intégrant l'intitulé du define et là, c'est la cata et on peine en plus à voir d'où provient le problème. A ce titre les constantes peuvent être plus rigoureuses. Quand on sait ce qu'on fait et qu'on le choisit suffisamment détaillé pour éviter cet effet de bord, le define est très bien.

    • @MrArpSolina
      @MrArpSolina Před 3 lety

      @@EricPeronnin Ce problème est évité avec un peu de rigueur : les noms de define sont toujours en majuscules, et les noms de variables avec au moins 1 minuscule. A éviter également : les noms de define trop courts. Exemple : #define A 1

  • @benjamin3682
    @benjamin3682 Před 2 lety +1

    Bonjour,
    Encore merci pour cette présentation d’interruption. J'ai essayé de mettre cette fonction d’interruption sur le script des deux leds. Mon objectif est de faire un marche/arret avec l'appuie du bouton-poussoir. Un if(compteur_bp % 2 == 1) dans le void loop, et hop ça fait le job. Je n'arrive pas à enlever le premier appuyé qui si j'ai compris initialise le premier état de la fonction. Où ne comprend pas ce qu'il passe ?

    • @benjamin3682
      @benjamin3682 Před 2 lety +1

      Tout pour moi, le détail est corrigé dans la video suivante. J'ai bien mon on/off tout nickel.
      merci

  • @danielbedez9724
    @danielbedez9724 Před 2 lety

    Bonjour,
    Très agréable de suivre les vidéos, surtout pour un novice comme moi, lol.
    Par contre, si j'ai bien compris on a 13 input ou output suivant la configuration sur le arduino uno.
    En changeant, de numéro de Pin, je me suis rendu compte que cela ne fonctionnait pas sur toutes les pins?
    Est-ce parce que j'ai utilisé le 3,3volts?
    Je n'ai pas fait l'essaie avec le 5volts, car mettre le + 5v à la masse, pour moi c'est un court circuit!
    Y a t'il une résistance sur toutes les Pins?
    Quelque réflexions qui me sont passé par l'esprit.
    Encore merci pour vos vidéos très instructives.
    Daniel

  • @kitsu5242
    @kitsu5242 Před rokem

    Bonjour, merci pour vos tutos j’ai beaucoup appris. J’ai besoin d’aide pour un programme « a la escape game » je voudrai actionner un servo moteur (genre ouvrir une porte) seulement si une séquence donnée est entrée sur 5 bouton poussoir, séquence préprogrammée, exemples, 1-2-5-3-4 ou 1-2-3-2-1-5-4 … Je suis preneur de toute aide ! Merci

  • @cedricserieys9768
    @cedricserieys9768 Před 3 lety +2

    Bonjour, à la fin de la vidéo, le premier appui ne fonctionnera pas car la variable statique n'est pas encore initialisée. Il faudrait un mécanisme de prise en compte du premier appui ou, plus simple mettre la variable en global et mettre un délai d'au moins 100ms après sont init dans le setup afin de tout caler poile-poil.
    Bonnes vidéos en tout cas et bonne continuation.

    • @EricPeronnin
      @EricPeronnin  Před 3 lety +2

      Il faut initialiser _millis = 0 contrairement à ce que j'ai fait en corrigeant... Il est peu probable d'avoir un appui durant les 100 premières millisecondes.

    • @cedricserieys9768
      @cedricserieys9768 Před 3 lety +2

      @@EricPeronnin En effet c'est plus simple.

  • @antoinedevos3765
    @antoinedevos3765 Před 3 lety +1

    Je vous souhaite une excellente fête de Pâques 🐇

    • @EricPeronnin
      @EricPeronnin  Před 3 lety

      Merci Antoine. J'espère que vous avez bien profité de ce long week-end

  • @martinefournier2185
    @martinefournier2185 Před 3 lety +1

    bonjour,
    super cet exemple d'utilisation des interruptions combiné au problème de rebond.
    ma question sera simple: pourquoi déclarer en première ligne : #include ?
    merci de vos précisions !

    • @EricPeronnin
      @EricPeronnin  Před 3 lety

      Bonjour. C'est nécessaire pour platformio. Avec l'IDE Arduino, Arduino le gère automatiquement.

    • @martinefournier2185
      @martinefournier2185 Před 3 lety

      @@EricPeronnin , merci pour cette précision.

  • @sammodelisme
    @sammodelisme Před 3 lety +1

    Encore Merci pour cette vidéo. Question : Peut on déclarer plusieurs interruptions, dans le cas de 2 codeurs sur 2 moteurs ?

    • @danielroibert5631
      @danielroibert5631 Před 3 lety +1

      Le uC ATmega328 n’offre que deux entrées avec interruption. Ce sont les pins 2 et 3 de l’Arduino Uno. Je trouve que c’est une des principales limitations de l’ATmega328 par rapport à ses concurrents. Il existe bien évidemment des uC qui offrent bien plus d’entrée avec interruptions. Certains uC disposent même d’interruptions sur chaque entrée.

    • @EricPeronnin
      @EricPeronnin  Před 3 lety +1

      Bien sûr. Autant qu'il y a de sources d'interruptions dans le uC.

  • @adamaadam8073
    @adamaadam8073 Před 3 lety +1

    bonjour, est ce que vous allez faire des video sur les registre ? (PINx, DDRx,PORTx)? Sinon superbe vidéo :)

    • @EricPeronnin
      @EricPeronnin  Před 3 lety

      Bonjour. C'est déjà fait : czcams.com/video/WV_b9nrDDmg/video.html

  • @jean-marccliche3457
    @jean-marccliche3457 Před 3 lety +2

    Très bonne vidéo ! Pour une télécommande comment on fait pour qu'une touche ai deux fontions ? Comme par exenple activé et désactivé un relais sur la même touche, ON/OFF Avec Arduino.

    • @EricPeronnin
      @EricPeronnin  Před 3 lety

      Lorsque la pression sur la touche est détectée, on regarde l'état du relais et on le complémente.
      relais = !relais;
      digitalWrite(PIN_RELAIS, relais);

  • @eliegedeonbikieyoudonangou5728

    Très bonne vidéo ! J'ai une question cependant : pourquoi dans votre code la fonction "attachInterrupt" est déclarée dans le void setup ? On m'a appris que dans le void setup on ne déclarait que les fonctions qui ne s'exécutent qu'une seule fois, mais de ce que j'ai compris "attachInterrupt" est censée s'exécuter plusieurs fois, chaque fois que le bouton poussoir est à l'état bas. Donc ne doit-on pas la déclarer dans le void loop ? Je l'ai déclaré dans le void loop et ça fonctionne tout aussi bien, mais j'aimerai savoir pourquoi est ce que vous l'avez déclaré dans le void setup.

    • @EricPeronnin
      @EricPeronnin  Před 3 lety +2

      Bonsoir. AttachInterrupt ne s'exécute qu'une seule fois. C'est la fonction qui lui ai fournie sous forme de pointeur de fonction qui sera exécutée ensuite à chaque interruption. Donc tout est normal.

    • @eliegedeonbikieyoudonangou5728
      @eliegedeonbikieyoudonangou5728 Před 3 lety

      @@EricPeronnin D'accord, puisqu'elle ne s'exécute qu'une seule fois je comprend qu'elle doit être déclarée dans le Setup 👌. Mais alors... comment je peux expliquer le fait que ça fonctionne quand même lorsque je la déclare dans la boucle loop ?
      Merci

  • @danielroibert5631
    @danielroibert5631 Před 3 lety

    Bonjour, formidable et merci encore pour vos excellentes vidéos. Il est normal que le premier appui sur le bouton soit rejeté car les deux variables, precedenteIT et _millis, sont initialisées quasi en même temps. Personnellement, j’aurais placé la déclaration et l’initialisation de precedenteIT en global. De cette façon, on peut espérer qu’il se déroule le temps suffisant (délais d’anti rebond DELAI_SANS_REBOND ) avant que l’utilisateur appuie la première fois sur le bouton.

    • @EricPeronnin
      @EricPeronnin  Před 3 lety

      Bonjour Daniel. Effectivement. J'avais au départ initialisé à 0 et j'ai eu la mauvaise idée d'initialiser à millis ensuite... Car en fait, c'est le premier appui qui crée finalement la variable static. Donc quelque soit le temps écoulé avant le premier appui, le problème subsistera.

    • @danielroibert5631
      @danielroibert5631 Před 3 lety

      @@EricPeronnin Oui, vous avez raison, initialiser PrecedenteIT à 0 dans l’interruption, c’est plus simple et plus propre. (voilà entre autres, pourquoi je ne suis pas prof d’unif :-) )

    • @EricPeronnin
      @EricPeronnin  Před 3 lety

      @@danielroibert5631 Après avoir laissé une erreur comme celle que vous avez décelée, le prof ne fait pas le malin. Enfin là, je n'ai pas le courage de refaire la vidéo. Dommage que CZcams ne permette pas de mettre des stickers pour des annotations ultérieures.

    • @danielroibert5631
      @danielroibert5631 Před 3 lety

      @@EricPeronnin Oui, quand c’est vraiment important, certains CZcamsurs ajoutent un correctif dans la description sous la vidéo. C'est souvent bien suffisant.

  • @davidmaillot2253
    @davidmaillot2253 Před 3 lety

    Expliquée en toute simplicité. L'image à 6:36 secondes me pose cependant un problème. Si je considère que le temps est millis() , pourquoi le carré orange est au dessus de la ligne du temps?

  • @bouaitarached998
    @bouaitarached998 Před 3 lety +1

    bonjour, merci de m'indiquer comment utiliser cette fonction sur une carte ESP8266 V3.merci

    • @EricPeronnin
      @EricPeronnin  Před 3 lety

      De la même façon.

    • @bouaitarached998
      @bouaitarached998 Před 3 lety

      le programme est le suivant:
      # include
      # define PIN_BP 2
      volatile int compteurBP = 0;
      void ISR_BP(){
      compteurBP++;
      }
      void setup() {
      // put your setup code here, to run once:
      Serial.begin(9600);
      pinMode (PIN_BP, INPUT_PULLUP) ;
      attachInterrupt(digitalPinToInterrupt(PIN_BP), ISR_BP, RISING);
      }
      void loop() {
      // put your main code here, to run repeatedly:
      Serial.println (compteurBP);
      }

    • @MsFireroll
      @MsFireroll Před 2 lety

      Cela n'a pas fonctionné pour mon ESP8266 NodeMCU ni pour mon Mini D1-> j'avais une erreur "ISR not in IRAM!"
      Par contre en rajoutant "void ICACHE_RAM_ATTR ISR_BP(); " au début, le code était fonctionnel (avec GPIO14 pour mon Mini D1)

    • @user-xb2sr5ic5n
      @user-xb2sr5ic5n Před rokem

      @EricPeronnin Bonjour Monsieur et tout d'abord merci beaucoup pour votre contenu d'excellentes qualité.
      Cependant je ne comprends malheureusement pas comment vous pouvez vous servir de millis()au coeur d'une ISR() contrairement à ce que l'on prêche sur plusieurs forums. Où il est expliqué que attaches interrupts désactive ce type de fonction a part la fonction micros() ....qui si j'ai bien compris ne serai pas sur le même Timer....
      Si vous pouviez m'éclairer sur ce point , je vous en remercie.
      Voilà des jours que je recherche et je tourne en rond sur ce point
      Merci pour votre aide.
      Bonne journée.

  • @tanguymarion6368
    @tanguymarion6368 Před 3 lety

    RIP la capa de filtrage sur le bouton poussoir :'(