{"id":2942,"date":"2020-04-21T10:55:25","date_gmt":"2020-04-21T08:55:25","guid":{"rendered":"http:\/\/www.ardpylab.fr\/?page_id=2942"},"modified":"2020-05-10T17:11:46","modified_gmt":"2020-05-10T15:11:46","slug":"gestion-des-entrees-analogiques-2","status":"publish","type":"page","link":"https:\/\/www.ardpylab.fr\/?page_id=2942","title":{"rendered":"Gestion des entr\u00e9es analogiques"},"content":{"rendered":"\n<h2 style=\"text-align: center;\"><em><strong>(par le protocole \u201dFirmata Express\u201d)<\/strong><\/em><\/h2>\n\n\n\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Pour lire la valeur de la tension d\u2019une entr\u00e9e analogique (par exemple, la broche A0), il faut la d\u00e9clarer au pr\u00e9alable en entr\u00e9e analogique avec la commande suivante :<\/p>\n<p style=\"padding-left: 40px;\"><strong>loop.run_until_complete(board.set_pin_mode_analog_input(0))<\/strong>&nbsp;<\/p>\n<p>o\u00f9&nbsp;:<\/p>\n<p style=\"padding-left: 40px;\">&#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 style=\"padding-left: 40px;\">&#8211; <strong>\u201d<\/strong><strong>0\u201d<\/strong>&nbsp;est le num\u00e9ro de la broche A0 du microcontr\u00f4leur que l\u2019on souhaite d\u00e9clarer en entr\u00e9e analogique,<\/p>\n<p style=\"padding-left: 40px;\">&#8211; <strong>\u201d<\/strong><strong>loop\u201d<\/strong> 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: 80px;\"><strong>loop = asyncio.get_event_loop()<\/strong>&nbsp;<\/p>\n<p><br>On peut d\u00e9finir une fonction d\u00e9clarant plus facilement une broche en entr\u00e9e analogique&nbsp;:<\/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 Set_AnalogInput_Pin(board, pin):<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"color: #000000;\">loop.run_until_complete(board.set_pin_mode_analog_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 A0 en entr\u00e9e num\u00e9rique est alors&nbsp;plus simple :<\/p>\n<p style=\"padding-left: 40px;\"><strong>Set_AnalogInput_Pin(board,0)<br><br><\/strong><\/p>\n<p>Ensuite, on pourra lire la valeur de la tension de la broche au moyen de cette instruction :<\/p>\n<p style=\"padding-left: 40px;\"><strong>value = loop.run_until_complete(board.analog_read(0))<\/strong><\/p>\n<p>qui retourne une liste dont le premier \u00e9l\u00e9ment (<strong>value[0]<\/strong>) est un nombre entier d\u00e9cimal entre 0 et 1023 repr\u00e9sentatif d\u2019une tension entre 0 et 5V.&nbsp;<br><br><\/p>\n<p>De m\u00eame, on peut d\u00e9finir une fonction pour lire la valeur de la tension d\u2019une entr\u00e9e analogique&nbsp;:<\/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 Analog_Read(board, pin):&nbsp;&nbsp;&nbsp; <\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"color: #000000;\">value = loop.run_until_complete(board.analog_read(pin))<\/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 la valeur de la tension de la broche A0 devient&nbsp;:<\/p>\n<p style=\"padding-left: 40px;\"><strong>ValA0 = Analog_Read(board, 0)<\/strong><\/p>\n<p><strong>&nbsp;<\/strong><\/p>\n<p><u>Exemple&nbsp;:<\/u><\/p>\n<p>L\u2019exemple d\u2019application de la gestion des entr\u00e9es analogiques avec <strong>\u201dFirmata Express\u201d<\/strong> est le m\u00eame que celui avec <strong>\u201dFirmata Standard\u201d<\/strong>.<\/p>\n<p>Le programme (<strong>\u201d<a href=\"https:\/\/www.ardpylab.fr\/downloads\/firmata-express\/ledrvbanaloginput.zip\" data-wplink-url-error=\"true\">LedRVBAnalogInput.py<\/a>\u201d<\/strong>) suivant, lit la valeur de la broche A0 sur laquelle est connect\u00e9 un potentiom\u00e8tre et r\u00e8gle la luminosit\u00e9 de la DEL rouge proportionnellement \u00e0 cette valeur :<\/p>\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2500 aligncenter\" style=\"border: 3px solid #eeeeee; padding: 3px; margin: 3px;\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-ms5.png\" alt=\"\" width=\"574\" height=\"313\"><\/figure>\n<\/div>\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\/LedRVBAnalogInput.py\" data-wplink-url-error=\"true\"><img loading=\"lazy\" decoding=\"async\" width=\"846\" height=\"1024\" class=\"wp-image-2948 aligncenter\" style=\"border: 3px solid #eeeeee; padding: 3px; margin: 3px;\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm19-846x1024.png\" alt=\"\" srcset=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm19-846x1024.png 846w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm19-248x300.png 248w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm19-768x930.png 768w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm19.png 913w\" sizes=\"auto, (max-width: 846px) 100vw, 846px\" \/><\/a><\/figure>\n<\/div>\n<p>&nbsp;<\/p>\n\n\n\n<p><strong><u>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 \u201d<strong>ConnectToArduino.py<\/strong>\u201d, contenant les fonctions de connexion \u00e0 l\u2019arduino via le protocole \u201d<strong>Firmata Express<\/strong>\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_AnalogOutput_Pin\u201d <\/strong>pour d\u00e9clarer une broche en sortie analogique,<\/p>\n<p style=\"padding-left: 40px;\">. Fonction <strong>\u201d<\/strong><strong>Set_AnalogInput_Pin\u201d <\/strong>pour d\u00e9clarer une broche en entr\u00e9e analogique,<\/p>\n<p style=\"padding-left: 40px;\">. Fonction <strong>\u201d<\/strong><strong>Analog_Write\u201d <\/strong>pour modifier la tension d\u2019une sortie analogique,<\/p>\n<p style=\"padding-left: 40px;\">. Fonction <strong>\u201d<\/strong><strong>Analog_Read\u201d <\/strong>pour lire la valeur de la tension d\u2019une entr\u00e9e analogique,<\/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>PinPot = 0<\/strong> (constante correspondant au n\u00b0 de la broche A0 sur laquelle le potentiom\u00e8tre est connect\u00e9)<\/p>\n<p style=\"padding-left: 40px;\">. <strong>ValPot = 0<\/strong> (variable pour stocker la valeur de l\u2019entr\u00e9e analogique A0)<\/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> :\u00a0<\/p>\n<p style=\"padding-left: 40px;\">. D\u00e9tection du port COM\u00a0:<\/p>\n<p style=\"padding-left: 80px;\"><strong>PortComArduino = SelectPortCOM()<\/strong><\/p>\n<p style=\"padding-left: 40px;\">. Tentative d\u2019ouverture du port COM s\u00e9lectionn\u00e9\u00a0et connexion \u00e0 l\u2019Arduino:<\/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;\">\u2013&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 analogique :<\/p>\n<p style=\"padding-left: 80px;\"><strong>Set_AnalogOutput_Pin(board, PinLedR)<\/strong><\/p>\n<p style=\"padding-left: 40px;\">&#8211;&gt; D\u00e9claration de la broche du potentiom\u00e8tre en entr\u00e9e analogique :<\/p>\n<p style=\"padding-left: 80px;\"><strong>Set_AnalogInput_Pin(board, PinPot)<\/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 la valeur (nombre d\u00e9cimal entre 0 et 1023) de la broche du potentiom\u00e8tre\u00a0:<\/p>\n<p style=\"padding-left: 80px;\"><strong>ValPot = Analog_Read(board,0)<\/strong><\/p>\n<p style=\"padding-left: 40px;\">. La DEL rouge est connect\u00e9 \u00e0 une broche d\u00e9clar\u00e9e en sortie analogique qui accepte des valeurs enti\u00e8res entre 0 et 255. La valeur de la broche A0 lue par l\u2019instruction pr\u00e9c\u00e9dente \u00e9tant comprise entre 0 et 1023, celle-ci sera divis\u00e9e par 4 et appliqu\u00e9e sur la broche de la DEL :<\/p>\n<p style=\"padding-left: 80px;\"><strong>AnalogWrite(board,PinLedR, int(ValPot\/4))<br \/><br \/><\/strong><\/p>\n<p>&#8211; <u>Fin du programme en appuyant sur 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=2922\"><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=2969\"><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>","protected":false},"excerpt":{"rendered":"<p>(par le protocole \u201dFirmata Express\u201d) &nbsp; &nbsp; Pour lire la valeur de la tension d\u2019une entr\u00e9e analogique (par exemple, la broche A0), il faut la d\u00e9clarer au pr\u00e9alable en entr\u00e9e analogique avec la commande suivante : loop.run_until_complete(board.set_pin_mode_analog_input(0))&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; \u201d0\u201d&nbsp;est [&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-2942","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=\/wp\/v2\/pages\/2942","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=2942"}],"version-history":[{"count":0,"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=\/wp\/v2\/pages\/2942\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2942"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}