{"id":2905,"date":"2020-04-21T09:20:18","date_gmt":"2020-04-21T07:20:18","guid":{"rendered":"http:\/\/www.ardpylab.fr\/?page_id=2905"},"modified":"2020-05-10T17:11:32","modified_gmt":"2020-05-10T15:11:32","slug":"gestion-des-entrees-numeriques-2","status":"publish","type":"page","link":"https:\/\/www.ardpylab.fr\/?page_id=2905","title":{"rendered":"Gestion des entr\u00e9es num\u00e9riques"},"content":{"rendered":"\n<h2 style=\"text-align: center;\"><em><strong>(par le protocole <\/strong><\/em><em><strong>\u201d<\/strong><\/em><em><strong>Firmata express\u201d)<\/strong><\/em><\/h2>\n\n\n\n<p>&nbsp;<\/p>\n<p><br>Pour lire l\u2019\u00e9tat logique d\u2019une broche num\u00e9rique (par exemple, la broche N\u00b012), 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;&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><strong>loop.run_until_complete(board.set_pin_mode_analog_input(12))<\/strong>&nbsp;<\/p>\n<p>o\u00f9&nbsp;:<\/p>\n<p>&#8211; <strong>\u201d<\/strong><strong>board\u201d<\/strong> est l\u2019objet cr\u00e9\u00e9 lors de l\u2019appel de la m\u00e9thode <strong>\u201d<\/strong><strong>PymataExpress\u201d<\/strong> du module <strong>\u201d<\/strong><strong>pymata-express\u201d<\/strong>,<\/p>\n<p>&#8211; <strong>\u201d<\/strong><strong>12\u201d<\/strong>&nbsp;est le num\u00e9ro de la broche du microcontr\u00f4leur que l\u2019on souhaite d\u00e9clarer en entr\u00e9e digitale,<\/p>\n<p>&#8211; <strong>\u201d<\/strong><strong>loop\u201d<\/strong>&nbsp;est la boucle des t\u00e2ches <strong>\u201d<\/strong><strong>asyncio\u201d<\/strong>&nbsp;d\u00e9clar\u00e9e ainsi&nbsp;<strong>: <\/strong><\/p>\n<p style=\"padding-left: 40px;\"><strong>loop = asyncio.get_event_loop()<\/strong>&nbsp;<br><br><\/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: 21px;\">\n<tbody>\n<tr style=\"height: 21px;\">\n<td style=\"height: 21px; padding-left: 40px;\" bgcolor=\"#FFFFCC\">\n<p><span style=\"color: #000000;\">def Set_DigitalInput_Pin(board, pin):<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"color: #000000;\">loop.run_until_complete(board.set_pin_mode_digital_input(pin))<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n\n\n\n<p><br>La syntaxe pour d\u00e9clarer la broche N\u00b012 en entr\u00e9e num\u00e9rique est alors&nbsp;plus simple :<\/p>\n<p style=\"padding-left: 40px;\"><strong>Set_DigitalInput_Pin(board,12)<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>value = loop.run_until_complete(board.digital_read(12))<\/strong><\/p>\n<p>qui retourne une liste dont le premier \u00e9l\u00e9ment (<strong>value[0]) <\/strong>est \u00e9gale \u00e0 <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>.<br><br><\/p>\n<p>De m\u00eame, on peut d\u00e9finir une fonction pour lire l&rsquo;\u00e9tat logique d\u2019une entr\u00e9e digitale&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 Digital_Read(board, pin):&nbsp;&nbsp;&nbsp;<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"color: #000000;\">value = loop.run_until_complete(board.digital_read(pin))&nbsp;&nbsp;&nbsp;<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"color: #000000;\">return value[0]<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n\n\n\n<p><br>Ainsi, l\u2019instruction pour lire l&rsquo;\u00e9tat logique de la broche N\u00b012 devient&nbsp;:<\/p>\n<p style=\"padding-left: 40px;\"><strong>ValPin12 = Digital_Read(board, 12)<\/strong><\/p>\n<p>&nbsp;<\/p>\n\n\n\n<p><u>Exemple&nbsp;:<\/u><\/p>\n<p>L\u2019exemple d\u2019application de la gestion des entr\u00e9es num\u00e9riques avec <strong>\u201dFirmata Express\u201d<\/strong> est le m\u00eame que celui avec <strong>\u201dFirmata Standard\u201d<\/strong>.<\/p>\n<p>Le programme suivant (nomm\u00e9 <strong>\u201d<a href=\"https:\/\/www.ardpylab.fr\/downloads\/firmata-express\/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 :<\/p>\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" 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=\"\" width=\"575\" height=\"317\"><\/figure>\n<\/div>\n<p>&nbsp;<\/p>\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/www.ardpylab.fr\/downloads\/firmata-express\/codes\/py\/LedRVBDigitalInput.py\" data-wplink-url-error=\"true\"><img loading=\"lazy\" decoding=\"async\" width=\"787\" height=\"1024\" class=\"wp-image-2912 aligncenter\" style=\"border: 3px solid #eeeeee; padding: 3px; margin: 3px;\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm17-787x1024.png\" alt=\"\" srcset=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm17-787x1024.png 787w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm17-231x300.png 231w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm17-768x999.png 768w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm17.png 909w\" sizes=\"auto, (max-width: 787px) 100vw, 787px\" \/><\/a><\/figure>\n<\/div>\n\n\n\n<p><strong><u><br \/>D\u00e9roulement du programme<\/u><\/strong><strong>\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>\u201d<\/strong><strong>ConnectToArduino.py\u201d<\/strong>, contenant les fonctions de connexion \u00e0 l\u2019arduino via le protocole \u201dFirmata Express\u201d,<\/p>\n<p style=\"padding-left: 40px;\">. La biblioth\u00e8que <strong>\u201d<\/strong><strong>asyncio\u201d <\/strong>n\u00e9cessaire au fonctionnement de <strong>\u201d<\/strong><strong>PymataExpress\u201d<\/strong><\/p>\n<p style=\"padding-left: 40px;\">. Fonction <strong>\u201d<\/strong><strong>Set_DigitalOutput_Pin\u201d <\/strong>pour d\u00e9clarer une broche en sortie num\u00e9rique,<\/p>\n<p style=\"padding-left: 40px;\">. Fonction <strong>\u201d<\/strong><strong>Digital_Write\u201d <\/strong>pour modifier l\u2019\u00e9tat logique d\u2019une broche num\u00e9rique,<\/p>\n<p style=\"padding-left: 40px;\">. Fonction <strong>\u201d<\/strong><strong>Set_DigitalInput_Pin\u201d <\/strong>pour d\u00e9clarer une broche en entr\u00e9e num\u00e9rique,<\/p>\n<p style=\"padding-left: 40px;\">. Fonction <strong>\u201d<\/strong><strong>Digital_Read\u201d <\/strong>pour lire l\u2019\u00e9tat logique d\u2019une broche num\u00e9rique,<\/p>\n<p style=\"padding-left: 40px;\">. Fonction <strong>\u201d<\/strong><strong>Arduino_Exit\u201d <\/strong>pour fermer le port COM et se d\u00e9connecter de l\u2019Arduino.<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)<\/p>\n<p style=\"padding-left: 40px;\">. <strong>PortComArduino <\/strong>(port COM sur lequel l\u2019Arduino est connect\u00e9)<br \/><br \/><\/p>\n<p>&#8211; <u>Connexion \u00e0 l&rsquo;Arduino<\/u> (Idem programme pr\u00e9c\u00e9dent)\u00a0:<\/p>\n<p style=\"padding-left: 40px;\">. 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;\">. Si la connexion \u00e0 l\u2019Arduino est r\u00e9ussie:<\/p>\n<p style=\"padding-left: 40px;\">&#8211;&gt; d\u00e9finition d\u2019une boucle asyncio :<\/p>\n<p style=\"padding-left: 80px;\"><strong>loop = asyncio.get_event_loop()<\/strong><\/p>\n<p style=\"padding-left: 40px;\">&#8211;&gt; D\u00e9claration de la broche de la DEL rouge en sortie num\u00e9rique :<\/p>\n<p style=\"padding-left: 80px;\"><strong>Set_DigitalOutput_Pin(board, PinLedR)<\/strong><\/p>\n<p style=\"padding-left: 40px;\">&#8211;&gt; D\u00e9claration de la broche du bouton poussoir en entr\u00e9e num\u00e9rique :<\/p>\n<p style=\"padding-left: 80px;\"><strong>Set_DigitalInput_Pin(board, Pinbutton)<\/strong><strong><br \/><br \/><\/strong><\/p>\n<p>&#8211; <u>Boucle principale du programme (boucle \u201d<\/u><u>while True\u201d<\/u><u>)<\/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 = Digital_Read(board, PinButton)<\/strong><\/p>\n<p style=\"padding-left: 40px;\">. La DEL rouge est allum\u00e9e ou \u00e9teinte suivant la valeur de ValButton\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\u00a0\u00a0\u00a0\u00a0 Digital_Write(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 Digital_Write(board,PinLedR,0)<br \/><br \/><\/strong><\/p>\n<p>&#8211; <u>Fin du programme en appuyant sur <\/u><u>Ctrl-C<\/u>\u00a0:<\/p>\n<p style=\"padding-left: 40px;\">&#8211;&gt; La DEL rouge est \u00e9teinte et le port s\u00e9rie 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=2876\"><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=2922\"><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 express\u201d) &nbsp; Pour lire l\u2019\u00e9tat logique d\u2019une broche num\u00e9rique (par exemple, la broche N\u00b012), 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;&nbsp; loop.run_until_complete(board.set_pin_mode_analog_input(12))&nbsp; o\u00f9&nbsp;: &#8211; \u201dboard\u201d est l\u2019objet cr\u00e9\u00e9 lors de l\u2019appel de la m\u00e9thode \u201dPymataExpress\u201d du module \u201dpymata-express\u201d, &#8211; \u201d12\u201d&nbsp;est le num\u00e9ro de la broche du [&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-2905","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=\/wp\/v2\/pages\/2905","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=2905"}],"version-history":[{"count":0,"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=\/wp\/v2\/pages\/2905\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}