{"id":2784,"date":"2020-04-20T11:25:15","date_gmt":"2020-04-20T09:25:15","guid":{"rendered":"http:\/\/www.ardpylab.fr\/?page_id=2784"},"modified":"2020-05-10T17:05:53","modified_gmt":"2020-05-10T15:05:53","slug":"gestion-des-entrees-numeriques","status":"publish","type":"page","link":"https:\/\/www.ardpylab.fr\/?page_id=2784","title":{"rendered":"Gestion des entr\u00e9es num\u00e9riques"},"content":{"rendered":"\n<h2 style=\"text-align: center;\"><em><strong>(par le protocole \u201dFirmata standard\u201d)<\/strong><\/em><\/h2>\n<p><br><br><\/p>\n<p>Pour lire l\u2019\u00e9tat logique d\u2019une broche num\u00e9rique (par exemple, la broche N\u00b05), il faut la d\u00e9clarer au pr\u00e9alable en entr\u00e9e avec la commande suivante :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><strong>pin5 = board.get_pin(&lsquo;d:5:i&rsquo;)<\/strong>&nbsp;<\/p>\n<p>La syntaxe est <strong>\u201d<\/strong><strong>d\u201d<\/strong> pour digital, <strong>\u201d<\/strong><strong>5\u201d<\/strong> est le num\u00e9ro de la broche, <strong>\u201d<\/strong><strong>i\u201d<\/strong> pour input et <strong>\u201d<\/strong><strong>board\u201d<\/strong>&nbsp;est l\u2019objet cr\u00e9\u00e9 lors de l\u2019appel de la m\u00e9thode <strong>\u201dArduino\u201d<\/strong> du module <strong>\u201dpyfirmata\u201d<\/strong>.&nbsp;<\/p>\n<p>On peut d\u00e9finir une fonction d\u00e9clarant plus facilement une broche en entr\u00e9e num\u00e9rique&nbsp;:<br><br><\/p>\n\n\n\n<figure class=\"wp-block-table\">\n<table style=\"width: 100%; height: 39px;\">\n<tbody>\n<tr style=\"height: 21px;\">\n<td style=\"height: 21px; padding-left: 40px;\" bgcolor=\"#FFFFCC\">\n<p><span style=\"color: #000000;\">def DigitalInput(board,pin):<\/span><\/p>\n<p><span style=\"color: #000000;\">&nbsp;&nbsp;&nbsp; DigitalInputPin=board.get_pin(&lsquo;d:&rsquo;+ str(pin) +&rsquo;:i&rsquo;)<\/span><\/p>\n<p><span style=\"color: #000000;\">&nbsp;&nbsp;&nbsp; return DigitalInputPin<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n\n\n\n<p>La syntaxe pour d\u00e9clarer la broche N\u00b05 en entr\u00e9e num\u00e9rique est alors&nbsp;plus simple :<\/p>\n<p style=\"padding-left: 40px;\"><strong>pin5 = DigitalInput(board,5)<br><br><\/strong><\/p>\n<p>Ensuite on pourra lire l&rsquo;\u00e9tat logique de la broche au moyen de cette instruction :<\/p>\n<p style=\"padding-left: 40px;\"><strong>valeur = pin5.read()<\/strong><\/p>\n<p>qui retourne <strong>\u201d<\/strong><strong>1\u201d<\/strong>&nbsp;lorsque l&rsquo;entr\u00e9e est \u00e0 <strong>5 V<\/strong>, et <strong>\u201d<\/strong><strong>0\u201d<\/strong>&nbsp;lorsqu&rsquo;elle est \u00e0 <strong>0 V<\/strong>.&nbsp;<br><br><\/p>\n<p><u>Attention<\/u>&nbsp;:<\/p>\n<p>. Les donn\u00e9es lues transitent bien-s\u00fbr par la liaison s\u00e9rie, et pour \u00e9viter qu&rsquo;un trop grand nombre de mesures n&rsquo;encombrent la communication s\u00e9rie entre l&rsquo;Arduino et l&rsquo;ordinateur, Il faut aussi utiliser un it\u00e9rateur pr\u00e9vu dans <strong>pyFirmata<\/strong> :<\/p>\n\n\n\n<figure class=\"wp-block-table\">\n<table style=\"width: 100%; height: 39px;\">\n<tbody>\n<tr style=\"height: 21px;\">\n<td style=\"height: 21px; padding-left: 40px;\" bgcolor=\"#FFFFCC\"><span style=\"color: #000000;\">it = pyfirmata.util.Iterator(board)<br><\/span><span style=\"color: #808080;\"><span style=\"color: #000000;\">it.start()<\/span><br><\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n\n\n\n<p>. L\u2019it\u00e9rateur doit est lanc\u00e9 apr\u00e8s la connexion \u00e0 l\u2019Arduino.<br \/><br \/><\/p>\n<p><u>Exemple<\/u>\u00a0:<\/p>\n<p>Nous allons ajouter un <a href=\"https:\/\/www.ardpylab.fr\/downloads\/docs\/btnpush.pdf\" data-wplink-url-error=\"true\">bouton poussoir<\/a> \u00e0 notre <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2497\/#circuit\" data-wplink-url-error=\"true\">circuit<\/a> support des exemples\u00a0:<\/p>\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"561\" class=\"wp-image-2788 aligncenter\" style=\"border: 3px solid #eeeeee; padding: 3px; margin: 3px;\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm5-1024x561.png\" alt=\"\" srcset=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm5-1024x561.png 1024w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm5-300x164.png 300w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm5-768x421.png 768w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm5.png 1107w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n\n<p><br>La sortie du bouton poussoir est reli\u00e9e \u00e0 la borne 12 de l\u2019Arduino. La broche 12 sera donc \u00e0 l&rsquo;\u00e9tat logique haut (5 V) lorsque le bouton sera appuy\u00e9, et \u00e0 l&rsquo;\u00e9tat logique bas (0 V) lorsque le bouton sera rel\u00e2ch\u00e9.<\/p>\n<p>Le programme suivant (nomm\u00e9 <strong>\u201d<\/strong><strong><a href=\"https:\/\/www.ardpylab.fr\/downloads\/firmata-standard\/ledrvbdigitalinput.zip\" data-wplink-url-error=\"true\">LedRVBDigitalInput.py<\/a>\u201d<\/strong>) permet d\u2019allumer la DEL rouge quand le bouton poussoir est appuy\u00e9 et de l\u2019\u00e9teindre quand celui-ci est rel\u00e2ch\u00e9 :<br><br><\/p>\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/www.ardpylab.fr\/downloads\/firmata-standard\/codes\/py\/LedRVBDigitalInput.py\" data-wplink-url-error=\"true\"><img loading=\"lazy\" decoding=\"async\" width=\"868\" height=\"1024\" class=\"wp-image-2793 aligncenter\" style=\"border: 3px solid #eeeeee; padding: 3px; margin: 3px;\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm6-868x1024.png\" alt=\"\" srcset=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm6-868x1024.png 868w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm6-254x300.png 254w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm6-768x906.png 768w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm6.png 893w\" sizes=\"auto, (max-width: 868px) 100vw, 868px\" \/><\/a><\/figure>\n<\/div>\n\n\n\n<p><strong><u><br \/>D\u00e9roulement du programme<\/u>\u00a0:<\/strong><\/p>\n<p>&#8211; <u>Importation des librairies\u00a0et d\u00e9finition de fonctions<\/u> :<\/p>\n<p style=\"padding-left: 40px;\">. Le module <strong>\u201dConnectToArduino.py\u201d, <\/strong>contenant les fonctions de connexion \u00e0 l\u2019arduino via le protocole <strong>\u201dFirmata standard\u201d<\/strong>,\u00a0<\/p>\n<p style=\"padding-left: 40px;\">. La biblioth\u00e8que <strong>\u201dtime\u201d <\/strong>pour la gestion des temps de pause,<\/p>\n<p style=\"padding-left: 40px;\">. Fonction <strong>\u201dDigitalInput\u201d <\/strong>pour d\u00e9clarer une entr\u00e9e num\u00e9rique,<\/p>\n<p style=\"padding-left: 40px;\">. Fonction <strong>\u201dDigitalWrite\u201d <\/strong>pour modifier l\u2019\u00e9tat logique d\u2019une broche num\u00e9rique,<\/p>\n<p style=\"padding-left: 40px;\">. Fonction <strong>\u201dIterateur\u201d <\/strong>pour lancer l\u2019it\u00e9rateur de pyFirmata.<br \/><br \/><\/p>\n<p>&#8211; <u>D\u00e9claration des constantes et variables<\/u>\u00a0:<\/p>\n<p style=\"padding-left: 40px;\">. <strong>PinLedR = 11<\/strong> (constante correspondant au n\u00b0 de la broche sur laquelle la DEL rouge est connect\u00e9e),<\/p>\n<p style=\"padding-left: 40px;\"><strong>.PinButton = 12 <\/strong>(constante correspondant au n\u00b0 de la broche sur laquelle le bouton poussoir est connect\u00e9),<\/p>\n<p style=\"padding-left: 40px;\">. <strong>ValButton = 0<\/strong> (variable pour stocker la valeur de l\u2019\u00e9tat logique de la broche du bouton poussoir).<br \/><br \/><\/p>\n<p>&#8211; <u>Connexion \u00e0 l&rsquo;Arduino<\/u>\u00a0(Idem programme pr\u00e9c\u00e9dent)<\/p>\n<p style=\"padding-left: 40px;\">&#8211;&gt; Tentative d\u2019ouverture du port COM s\u00e9lectionn\u00e9 et connexion \u00e0 l\u2019Arduino:<\/p>\n<p style=\"padding-left: 80px;\"><strong>PortComArduino = SelectPortCOM()<\/strong><\/p>\n<p style=\"padding-left: 80px;\"><strong>board = OpenPortCom(PortComArduino)<\/strong><\/p>\n<p style=\"padding-left: 40px;\">&#8211;&gt; Si la connexion \u00e0 l\u2019Arduino est r\u00e9ussie:<\/p>\n<p style=\"padding-left: 80px;\">&#8211; Lancement de l\u2019it\u00e9rateur\u00a0:<\/p>\n<p style=\"padding-left: 120px;\"><strong>ArduinoIterateur = Iterateur(board)<\/strong>,<\/p>\n<p style=\"padding-left: 80px;\">&#8211; D\u00e9claration de la broche du bouton poussoir en entr\u00e9e digitale\u00a0:<\/p>\n<p style=\"padding-left: 120px;\"><strong>InputPin = DigitalInput(board, PinButton)<\/strong>,<\/p>\n<p style=\"padding-left: 80px;\">&#8211; Attente de 500 ms pour le lancement de l\u2019it\u00e9rateur.<br \/><br \/><\/p>\n<p>&#8211; <u>Boucle principale du programme (boucle \u201dwhile True\u201d) <\/u>:<\/p>\n<p style=\"padding-left: 40px;\">. lecture de l\u2019\u00e9tat logique de la broche du bouton poussoir\u00a0:<\/p>\n<p style=\"padding-left: 80px;\"><strong>ValButton = InputPin.read()<br \/><br \/><\/strong><\/p>\n<p style=\"padding-left: 40px;\">. La DEL rouge est allum\u00e9e ou \u00e9teinte suivant la valeur de <strong>ValButton<\/strong>\u00a0:<\/p>\n<p style=\"padding-left: 80px;\"><strong>if ValButton == 1:<\/strong><\/p>\n<p style=\"padding-left: 80px;\"><strong>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0DigitalWrite(board,PinLedR,1)<\/strong><\/p>\n<p style=\"padding-left: 80px;\"><strong>else:<\/strong><\/p>\n<p style=\"padding-left: 80px;\"><strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DigitalWrite(board,PinLedR,0)<br \/><br \/><\/strong><\/p>\n<p>&#8211; <u>Fin du programme en appuyant sur Ctrl-C<\/u><\/p>\n<p style=\"padding-left: 40px;\">&#8211;&gt; La DEL rouge est \u00e9teinte et le port COM est ferm\u00e9.<\/p>\n<p>\u00a0<\/p>\n\n\n<div  class=\"grids-section grids-is-stretch\" style=\"--_gs-gap-desktop:0px 0px;--_gs-m-desktop:0 0 0 0;--_gs-p-desktop:0 0 0 0;--_gs-bg-desktop:transparent none;--_gs-bg-xp-desktop:0px;--_gs-zi-desktop:auto;--_gs-d-desktop:block;--_gs-mw-desktop:calc(100% - 0 - 0);--_gs-gap-tablet:0px 0px;--_gs-m-tablet:0 0 0 0;--_gs-p-tablet:0 0 0 0;--_gs-bg-tablet:transparent none;--_gs-bg-xp-tablet:0px;--_gs-zi-tablet:auto;--_gs-d-tablet:block;--_gs-mw-tablet:calc(100% - 0 - 0);--_gs-gap-mobile:0px 0px;--_gs-m-mobile:0 0 0 0;--_gs-p-mobile:0 0 0 0;--_gs-bg-mobile:transparent none;--_gs-bg-xp-mobile:0px;--_gs-zi-mobile:auto;--_gs-d-mobile:block;--_gs-mw-mobile:calc(100% - 0 - 0);--_gs-columns:2;--_gs-rows:1\"><div class=\"grids-s-w_i\">\n<div class=\"grids-area\" style=\"--_ga-column:1\/2;--_ga-row:1\/2;--_ga-m-desktop:0 0 0 0;--_ga-p-desktop:0 0 0 0;--_ga-bg-desktop:transparent none;--_ga-zi-desktop:auto;--_ga-d-desktop:flex;--_ga-mw-desktop:calc(100% - 0 - 0);--_ga-m-tablet:0 0 0 0;--_ga-p-tablet:0 0 0 0;--_ga-bg-tablet:transparent none;--_ga-zi-tablet:auto;--_ga-d-tablet:flex;--_ga-mw-tablet:calc(100% - 0 - 0);--_ga-m-mobile:0 0 0 0;--_ga-p-mobile:0 0 0 0;--_ga-bg-mobile:transparent none;--_ga-zi-mobile:auto;--_ga-d-mobile:flex;--_ga-mw-mobile:calc(100% - 0 - 0)\">\n\n<div class=\"wp-block-image\"><figure class=\"alignleft size-large\"><a href=\"https:\/\/www.ardpylab.fr\/?page_id=2754\"><img loading=\"lazy\" decoding=\"async\" width=\"50\" height=\"28\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/03\/moins.jpg\" alt=\"\" class=\"wp-image-107\"\/><\/a><\/figure><\/div>\n\n<\/div>\n\n<div class=\"grids-area\" style=\"--_ga-column:2\/3;--_ga-row:1\/2;--_ga-m-desktop:0 0 0 0;--_ga-p-desktop:0 0 0 0;--_ga-bg-desktop:transparent none;--_ga-zi-desktop:auto;--_ga-d-desktop:flex;--_ga-mw-desktop:calc(100% - 0 - 0);--_ga-m-tablet:0 0 0 0;--_ga-p-tablet:0 0 0 0;--_ga-bg-tablet:transparent none;--_ga-zi-tablet:auto;--_ga-d-tablet:flex;--_ga-mw-tablet:calc(100% - 0 - 0);--_ga-m-mobile:0 0 0 0;--_ga-p-mobile:0 0 0 0;--_ga-bg-mobile:transparent none;--_ga-zi-mobile:auto;--_ga-d-mobile:flex;--_ga-mw-mobile:calc(100% - 0 - 0)\">\n\n<div class=\"wp-block-image\"><figure class=\"alignright size-large\"><a href=\"https:\/\/www.ardpylab.fr\/?page_id=2808\"><img loading=\"lazy\" decoding=\"async\" width=\"50\" height=\"28\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/03\/plus.jpg\" alt=\"\" class=\"wp-image-106\"\/><\/a><\/figure><\/div>\n\n<\/div>\n<\/div><\/div>\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>(par le protocole \u201dFirmata standard\u201d) Pour lire l\u2019\u00e9tat logique d\u2019une broche num\u00e9rique (par exemple, la broche N\u00b05), il faut la d\u00e9clarer au pr\u00e9alable en entr\u00e9e avec la commande suivante :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pin5 = board.get_pin(&lsquo;d:5:i&rsquo;)&nbsp; La syntaxe est \u201dd\u201d pour digital, \u201d5\u201d est le num\u00e9ro de la broche, \u201di\u201d pour input et \u201dboard\u201d&nbsp;est l\u2019objet cr\u00e9\u00e9 lors de [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2784","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=\/wp\/v2\/pages\/2784","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2784"}],"version-history":[{"count":0,"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=\/wp\/v2\/pages\/2784\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2784"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}