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

  Рет қаралды 13,816

Eric PERONNIN

Eric PERONNIN

Күн бұрын

Пікірлер: 69
@Jean-LucHAUSSIN
@Jean-LucHAUSSIN Жыл бұрын
Bonjour Eric, Tous mes respects. Très bon pédagogue et passionné par ce qu'il fait. Cordialement. Jean-Luc.
@philippeguitton6670
@philippeguitton6670 2 жыл бұрын
Bravo, vos vidéos sont pertinentes et fort bien réalisées ! MERCI !
@EricPeronnin
@EricPeronnin 2 жыл бұрын
Merci à vous 😊
@philippe5394
@philippe5394 3 жыл бұрын
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 3 жыл бұрын
Merci Philippe
@philippe5394
@philippe5394 3 жыл бұрын
@@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 3 жыл бұрын
@@philippe5394 Merci Philippe. Je suis allé voir. C'est vraiment chouette de sa part.
@jccr-mipmoi1599
@jccr-mipmoi1599 3 жыл бұрын
Très bien comme toujours ! Vivement la suite !
@EricPeronnin
@EricPeronnin 3 жыл бұрын
Merci
@antoinedevos3765
@antoinedevos3765 3 жыл бұрын
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 3 жыл бұрын
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 3 жыл бұрын
@@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.
@gilleshenri9529
@gilleshenri9529 3 жыл бұрын
comme dab joli court simple et concis
@julienlogeard
@julienlogeard 2 жыл бұрын
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!
@EclisiaSong
@EclisiaSong 3 жыл бұрын
Encore bravo Eric pour cette très très bonne vidéo.
@jfmahe1407
@jfmahe1407 3 жыл бұрын
Super ! Très clair.
@Victurf
@Victurf 3 жыл бұрын
Merci beaucoup!
@fabricemotard4312
@fabricemotard4312 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 !! 👏👏😉
@EricPeronnin
@EricPeronnin 3 жыл бұрын
Merci Fabrice
@freeeflyer
@freeeflyer 3 жыл бұрын
J'avais jamais essayé les int sur arduino. Merci pour le tuto..
@pascaldegenne4002
@pascaldegenne4002 2 жыл бұрын
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 2 жыл бұрын
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 2 жыл бұрын
@@EricPeronnin Merci pour votre réponse. C'est clair. Je n'avais pas saisi la notion de variable static.
@laurent9288
@laurent9288 3 жыл бұрын
Super ! On attend la partie 2 :-)
@EricPeronnin
@EricPeronnin 3 жыл бұрын
C'est fait 😊
@jck7398
@jck7398 3 жыл бұрын
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).
@benjamin3682
@benjamin3682 2 жыл бұрын
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 2 жыл бұрын
Tout pour moi, le détail est corrigé dans la video suivante. J'ai bien mon on/off tout nickel. merci
@jean-marccliche3457
@jean-marccliche3457 3 жыл бұрын
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 3 жыл бұрын
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);
@danielbedez9724
@danielbedez9724 2 жыл бұрын
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 Жыл бұрын
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
@martinefournier2185
@martinefournier2185 3 жыл бұрын
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 3 жыл бұрын
Bonjour. C'est nécessaire pour platformio. Avec l'IDE Arduino, Arduino le gère automatiquement.
@martinefournier2185
@martinefournier2185 3 жыл бұрын
@@EricPeronnin , merci pour cette précision.
@sylvainmasson4457
@sylvainmasson4457 3 жыл бұрын
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 3 жыл бұрын
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().
@JoeLaFrite
@JoeLaFrite 3 жыл бұрын
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 3 жыл бұрын
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 3 жыл бұрын
@@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
@antoinedevos3765
@antoinedevos3765 3 жыл бұрын
Je vous souhaite une excellente fête de Pâques 🐇
@EricPeronnin
@EricPeronnin 3 жыл бұрын
Merci Antoine. J'espère que vous avez bien profité de ce long week-end
@sammodelisme
@sammodelisme 3 жыл бұрын
Encore Merci pour cette vidéo. Question : Peut on déclarer plusieurs interruptions, dans le cas de 2 codeurs sur 2 moteurs ?
@danielroibert5631
@danielroibert5631 3 жыл бұрын
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 3 жыл бұрын
Bien sûr. Autant qu'il y a de sources d'interruptions dans le uC.
@adamaadam8073
@adamaadam8073 3 жыл бұрын
bonjour, est ce que vous allez faire des video sur les registre ? (PINx, DDRx,PORTx)? Sinon superbe vidéo :)
@EricPeronnin
@EricPeronnin 3 жыл бұрын
Bonjour. C'est déjà fait : kzbin.info/www/bejne/jYfCk2ykp6l3o8k
@mohamedsalemfdahi3443
@mohamedsalemfdahi3443 3 жыл бұрын
Formidable job please série sur raspberry pi 4 Merci en avance votre Channel est top
@EricPeronnin
@EricPeronnin 3 жыл бұрын
Je suis totalement sec sur le raspberry pi. Qu'attendez-vous comme genre de tuto sur lui ?
@antoinedevos3765
@antoinedevos3765 3 жыл бұрын
@@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 3 жыл бұрын
@@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
@davidmaillot2253
@davidmaillot2253 3 жыл бұрын
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?
@danielroibert5631
@danielroibert5631 3 жыл бұрын
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 3 жыл бұрын
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 3 жыл бұрын
@@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 3 жыл бұрын
@@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 KZbin ne permette pas de mettre des stickers pour des annotations ultérieures.
@danielroibert5631
@danielroibert5631 3 жыл бұрын
@@EricPeronnin Oui, quand c’est vraiment important, certains KZbinurs ajoutent un correctif dans la description sous la vidéo. C'est souvent bien suffisant.
@bouaitarached998
@bouaitarached998 3 жыл бұрын
bonjour, merci de m'indiquer comment utiliser cette fonction sur une carte ESP8266 V3.merci
@EricPeronnin
@EricPeronnin 3 жыл бұрын
De la même façon.
@bouaitarached998
@bouaitarached998 3 жыл бұрын
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 2 жыл бұрын
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)
@MaxVlasic-u9c
@MaxVlasic-u9c Жыл бұрын
@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.
@eliegedeonbikieyoudonangou5728
@eliegedeonbikieyoudonangou5728 3 жыл бұрын
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 3 жыл бұрын
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 3 жыл бұрын
@@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
@cedricserieys9768
@cedricserieys9768 3 жыл бұрын
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 3 жыл бұрын
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 3 жыл бұрын
@@EricPeronnin En effet c'est plus simple.
@tanguymarion6368
@tanguymarion6368 3 жыл бұрын
RIP la capa de filtrage sur le bouton poussoir :'(
Человек паук уже не тот
00:32
Miracle
Рет қаралды 3,3 МЛН
UFC 308 : Уиттакер VS Чимаев
01:54
Setanta Sports UFC
Рет қаралды 912 М.
🕊️Valera🕊️
00:34
DO$HIK
Рет қаралды 19 МЛН
Seja Gentil com os Pequenos Animais 😿
00:20
Los Wagners
Рет қаралды 88 МЛН
Arduino #20: les interruptions
34:39
Monsieur Francois
Рет қаралды 41 М.
How to do multiple tasks in Arduino | Beginners | millis() function
10:23
Les bases de l'Arduino !
18:17
Made by Amaury
Рет қаралды 210 М.
Arduino et modélisme en partant du début # 6 La boucle for
27:08
Marc Blanchard
Рет қаралды 1,6 М.
TRONIK AVENTUR 361- i2c +ADRESSES pour DEBUTANTS -
27:40
thonain
Рет қаралды 15 М.
Человек паук уже не тот
00:32
Miracle
Рет қаралды 3,3 МЛН