{"id":2922,"date":"2020-04-21T10:09:16","date_gmt":"2020-04-21T08:09:16","guid":{"rendered":"http:\/\/www.ardpylab.fr\/?page_id=2922"},"modified":"2020-05-10T17:11:39","modified_gmt":"2020-05-10T15:11:39","slug":"gestion-des-sorties-analogiques-2","status":"publish","type":"page","link":"https:\/\/www.ardpylab.fr\/?page_id=2922","title":{"rendered":"Gestion des sorties 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 utiliser une broche de l\u2019Arduino en sortie analogique (mode PWM), il faut au pr\u00e9alable la d\u00e9clarer avec la commande suivante&nbsp;:&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><strong>loop.run_until_complete(board.set_pin_mode_pwm(pin))<\/strong><\/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>pin\u201d<\/strong>&nbsp;est le num\u00e9ro de la broche du microcontr\u00f4leur que l\u2019on souhaite d\u00e9clarer en sortie 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>Le plus simple est de cr\u00e9er une fonction qui sera appel\u00e9e dans nos programmes en Python pour d\u00e9clarer une broche en sortie analogique&nbsp;:<\/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_AnalogOutput_Pin(board,pin):<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"color: #000000;\">loop.run_until_complete(board.set_pin_mode_pwm(pin))<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n\n\n\n<p><br>Ainsi, l\u2019instruction pour d\u00e9clarer la broche <strong>\u201d<\/strong><strong>11\u201d<\/strong>, de l\u2019objet <strong>\u201d<\/strong><strong>board\u201d<\/strong>, en sortie analogique&nbsp;est:<\/p>\n<p style=\"padding-left: 40px;\"><strong>Set_AnalogOutput_Pin(board, 11)<br><br><\/strong><\/p>\n<p>La tension de la broche N\u00b011 d\u00e9clar\u00e9e en sortie analogique est r\u00e9glable en modifiant le rapport cyclique du signal PWM entre <strong>val =<\/strong> <strong>0<\/strong> (0 %) et <strong>val =<\/strong> <strong>255<\/strong> (100%)&nbsp;:<\/p>\n<p style=\"padding-left: 40px;\"><strong>loop.run_until_complete(board.analog_write(pin, val))<br><br><\/strong><\/p>\n<p style=\"padding-left: 40px;\">&#8211;&gt; si val = 0, alors la tension est de 0 V<\/p>\n<p style=\"padding-left: 40px;\">&#8211;&gt; si val = 255, alors la tension est de 5 V<\/p>\n<p style=\"padding-left: 40px;\">&#8211;&gt; si val = 128, alors la tension est de 2,5 V<br><br><\/p>\n<p>De m\u00eame, on peut d\u00e9finir une fonction pour l\u2019\u00e9criture sur une sortie 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; width: 100%;\" bgcolor=\"#FFFFCC\">\n<p><span style=\"color: #000000;\">def Analog_Write(board, pin, val):&nbsp;<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"color: #000000;\">loop.run_until_complete(board.digital_write(pin, val))<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n\n\n\n<p><br>Ainsi, l\u2019instruction pour r\u00e9gler la sortie analogique <strong>\u201d11\u201d<\/strong>, de l\u2019objet <strong>\u201dboard\u201d<\/strong>, \u00e0 2,5 V est :<\/p>\n<p style=\"padding-left: 40px;\"><strong>Analog_Write(board, 11, 128)<br><br><\/strong><\/p>\n<p><u>Exemple<\/u>&nbsp;:<\/p>\n<p>L\u2019exemple d\u2019application de la gestion des sorties 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\/ledrvbanalogoutput.zip\" data-wplink-url-error=\"true\">LedRVBAnalogOutput.py<\/a>\u201d<\/strong>) va demander \u00e0 l\u2019utilisateur de saisir un nombre entier entre 0 et 255 de fa\u00e7on \u00e0 r\u00e9gler la tension de la broche sur laquelle la DEL rouge est connect\u00e9e entre 0 et 5 V.<\/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=\"573\" 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\/LedRVBAnalogOutput.py\" data-wplink-url-error=\"true\"><img loading=\"lazy\" decoding=\"async\" width=\"787\" height=\"1024\" class=\"wp-image-2928 aligncenter\" style=\"border: 3px solid #eeeeee; padding: 3px; margin: 3px;\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm18-787x1024.png\" alt=\"\" srcset=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm18-787x1024.png 787w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm18-230x300.png 230w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm18-768x1000.png 768w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm18.png 911w\" 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 \u201d<strong>ConnectToArduino.py<\/strong>\u201d, 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_AnalogOutput_Pin\u201d <\/strong>pour d\u00e9clarer une broche en sortie analogique,<\/p>\n<p style=\"padding-left: 40px;\">. Fonction <strong>\u201d<\/strong><strong>Analog_Write\u201d <\/strong>pour modifier la tension d\u2019une broche 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<\/p>\n<p>\u00a0<\/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>ChoixRP =False<\/strong> (variable bool\u00e9enne indiquant si la saisie du rapport cyclique a \u00e9t\u00e9 r\u00e9alis\u00e9e)<\/p>\n<p style=\"padding-left: 40px;\">. <strong>PortComArduino <\/strong>(port COM sur lequel l\u2019Arduino est connect\u00e9)<\/p>\n<p>\u00a0<\/p>\n<p>&#8211; <u>Connexion \u00e0 l&rsquo;Arduino<\/u> :<\/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;\">&#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 analogique :<\/p>\n<p style=\"padding-left: 80px;\"><strong>Set_AnalogOutput_Pin(board, PinLedR)<\/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;\">. Demande de saisie de la valeur de la luminosit\u00e9 souhait\u00e9e\u00a0entre 0 et 255 (un test est effectu\u00e9 sur la valeur saisie):<\/p>\n<p style=\"padding-left: 80px;\"><strong>saisie = input(\u201d\u201d)<\/strong><\/p>\n<p style=\"padding-left: 40px;\">. La luminosit\u00e9 de la DEL rouge est r\u00e9gl\u00e9e \u00e0 la valeur saisie\u00a0:<\/p>\n<p style=\"padding-left: 80px;\"><strong>AnalogWrite(board,PinLedR,saisie)<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=2905\"><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=2942\"><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; &nbsp; Pour utiliser une broche de l\u2019Arduino en sortie analogique (mode PWM), il faut au pr\u00e9alable la d\u00e9clarer avec la commande suivante&nbsp;:&nbsp; loop.run_until_complete(board.set_pin_mode_pwm(pin)) 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; \u201dpin\u201d&nbsp;est le num\u00e9ro de la broche du microcontr\u00f4leur que [&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-2922","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=\/wp\/v2\/pages\/2922","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=2922"}],"version-history":[{"count":0,"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=\/wp\/v2\/pages\/2922\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2922"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}