Bonjour Eric, Tous mes respects. Très bon pédagogue et passionné par ce qu'il fait. Cordialement. Jean-Luc.
@philippeguitton66702 жыл бұрын
Bravo, vos vidéos sont pertinentes et fort bien réalisées ! MERCI !
@EricPeronnin2 жыл бұрын
Merci à vous 😊
@philippe53943 жыл бұрын
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..........
@EricPeronnin3 жыл бұрын
Merci Philippe
@philippe53943 жыл бұрын
@@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,
@EricPeronnin3 жыл бұрын
@@philippe5394 Merci Philippe. Je suis allé voir. C'est vraiment chouette de sa part.
@jccr-mipmoi15993 жыл бұрын
Très bien comme toujours ! Vivement la suite !
@EricPeronnin3 жыл бұрын
Merci
@antoinedevos37653 жыл бұрын
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.
@EricPeronnin3 жыл бұрын
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.
@antoinedevos37653 жыл бұрын
@@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.
@gilleshenri95293 жыл бұрын
comme dab joli court simple et concis
@julienlogeard2 жыл бұрын
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!
@EclisiaSong3 жыл бұрын
Encore bravo Eric pour cette très très bonne vidéo.
@jfmahe14073 жыл бұрын
Super ! Très clair.
@Victurf3 жыл бұрын
Merci beaucoup!
@fabricemotard43123 жыл бұрын
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 !! 👏👏😉
@EricPeronnin3 жыл бұрын
Merci Fabrice
@freeeflyer3 жыл бұрын
J'avais jamais essayé les int sur arduino. Merci pour le tuto..
@pascaldegenne40022 жыл бұрын
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.
@EricPeronnin2 жыл бұрын
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.
@pascaldegenne40022 жыл бұрын
@@EricPeronnin Merci pour votre réponse. C'est clair. Je n'avais pas saisi la notion de variable static.
@laurent92883 жыл бұрын
Super ! On attend la partie 2 :-)
@EricPeronnin3 жыл бұрын
C'est fait 😊
@jck73983 жыл бұрын
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).
@benjamin36822 жыл бұрын
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 ?
@benjamin36822 жыл бұрын
Tout pour moi, le détail est corrigé dans la video suivante. J'ai bien mon on/off tout nickel. merci
@jean-marccliche34573 жыл бұрын
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.
@EricPeronnin3 жыл бұрын
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);
@danielbedez97242 жыл бұрын
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 Жыл бұрын
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
@martinefournier21853 жыл бұрын
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 !
@EricPeronnin3 жыл бұрын
Bonjour. C'est nécessaire pour platformio. Avec l'IDE Arduino, Arduino le gère automatiquement.
@martinefournier21853 жыл бұрын
@@EricPeronnin , merci pour cette précision.
@sylvainmasson44573 жыл бұрын
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.
@EricPeronnin3 жыл бұрын
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().
@JoeLaFrite3 жыл бұрын
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é...
@EricPeronnin3 жыл бұрын
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.
@MrArpSolina3 жыл бұрын
@@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
@antoinedevos37653 жыл бұрын
Je vous souhaite une excellente fête de Pâques 🐇
@EricPeronnin3 жыл бұрын
Merci Antoine. J'espère que vous avez bien profité de ce long week-end
@sammodelisme3 жыл бұрын
Encore Merci pour cette vidéo. Question : Peut on déclarer plusieurs interruptions, dans le cas de 2 codeurs sur 2 moteurs ?
@danielroibert56313 жыл бұрын
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.
@EricPeronnin3 жыл бұрын
Bien sûr. Autant qu'il y a de sources d'interruptions dans le uC.
@adamaadam80733 жыл бұрын
bonjour, est ce que vous allez faire des video sur les registre ? (PINx, DDRx,PORTx)? Sinon superbe vidéo :)
@EricPeronnin3 жыл бұрын
Bonjour. C'est déjà fait : kzbin.info/www/bejne/jYfCk2ykp6l3o8k
@mohamedsalemfdahi34433 жыл бұрын
Formidable job please série sur raspberry pi 4 Merci en avance votre Channel est top
@EricPeronnin3 жыл бұрын
Je suis totalement sec sur le raspberry pi. Qu'attendez-vous comme genre de tuto sur lui ?
@antoinedevos37653 жыл бұрын
@@EricPeronnin Est-ce que Raspberry n'est pas de la même trempe que Arduino (en plus complet et plus rapide bien sûr) ?
@JoeLaFrite3 жыл бұрын
@@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
@davidmaillot22533 жыл бұрын
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?
@danielroibert56313 жыл бұрын
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.
@EricPeronnin3 жыл бұрын
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.
@danielroibert56313 жыл бұрын
@@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 :-) )
@EricPeronnin3 жыл бұрын
@@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.
@danielroibert56313 жыл бұрын
@@EricPeronnin Oui, quand c’est vraiment important, certains KZbinurs ajoutent un correctif dans la description sous la vidéo. C'est souvent bien suffisant.
@bouaitarached9983 жыл бұрын
bonjour, merci de m'indiquer comment utiliser cette fonction sur une carte ESP8266 V3.merci
@EricPeronnin3 жыл бұрын
De la même façon.
@bouaitarached9983 жыл бұрын
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); }
@MsFireroll2 жыл бұрын
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 Жыл бұрын
@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.
@eliegedeonbikieyoudonangou57283 жыл бұрын
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.
@EricPeronnin3 жыл бұрын
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.
@eliegedeonbikieyoudonangou57283 жыл бұрын
@@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
@cedricserieys97683 жыл бұрын
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.
@EricPeronnin3 жыл бұрын
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.
@cedricserieys97683 жыл бұрын
@@EricPeronnin En effet c'est plus simple.
@tanguymarion63683 жыл бұрын
RIP la capa de filtrage sur le bouton poussoir :'(