{"id":3144,"date":"2019-02-16T23:57:37","date_gmt":"2019-02-17T04:57:37","guid":{"rendered":"https:\/\/espacerm.com\/webgen\/?page_id=3144"},"modified":"2021-08-31T12:45:15","modified_gmt":"2021-08-31T17:45:15","slug":"rail-motorise-pour-la-macrophotographie-et-declencheur","status":"publish","type":"page","link":"https:\/\/espacerm.com\/webgen\/rail-motorise-pour-la-macrophotographie-et-declencheur\/","title":{"rendered":"Rail motoris\u00e9 pour la macrophotographie et d\u00e9clencheur d&rsquo;appareil photo et de flash"},"content":{"rendered":"\n<figure class=\"wp-block-image\"><a href=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/03\/rail_motoris\u00e9_00.jpg\" target=\"_blank\" rel=\"noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"666\" src=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/03\/rail_motoris\u00e9_00-1024x666.jpg\" alt=\"\" class=\"wp-image-3339\" srcset=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/03\/rail_motoris\u00e9_00-1024x666.jpg 1024w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/03\/rail_motoris\u00e9_00-300x195.jpg 300w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/03\/rail_motoris\u00e9_00-768x499.jpg 768w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/03\/rail_motoris\u00e9_00.jpg 1576w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>Syst\u00e8me motoris\u00e9 pour la prise de photos en vue d&rsquo;un empilement en fonction de la mise au point (focus stacking). En macrophotographie, la zone de nettet\u00e9 couvre souvent qu&rsquo;une petite partie du sujet. Plusieurs clich\u00e9s sont requis pour couvrir le sujet au complet. Les photos captur\u00e9es sont combin\u00e9es pour obtenir une photo finale dont l&rsquo;ensemble du sujet est au foyer. Le circuit comprend le d\u00e9clencheur de l&rsquo;appareil photo. Un flash peut aussi \u00eatre d\u00e9clench\u00e9 simultan\u00e9ment.<\/p>\n\n\n\n<figure class=\"wp-block-gallery columns-2 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"640\" src=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/03\/Presse-papier01-1024x640.jpg\" alt=\"\" data-id=\"3342\" data-link=\"https:\/\/espacerm.com\/webgen\/rail-motorise-pour-la-macrophotographie-et-declencheur\/presse-papier01-2\/\" class=\"wp-image-3342\" srcset=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/03\/Presse-papier01-1024x640.jpg 1024w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/03\/Presse-papier01-300x188.jpg 300w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/03\/Presse-papier01-768x480.jpg 768w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/03\/Presse-papier01.jpg 1920w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" decoding=\"async\" width=\"657\" height=\"1024\" src=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/03\/2019-03-12-02-08-34-Cbas-657x1024.jpg\" alt=\"\" data-id=\"3343\" data-link=\"https:\/\/espacerm.com\/webgen\/rail-motorise-pour-la-macrophotographie-et-declencheur\/2019-03-12-02-08-34-cbas\/\" class=\"wp-image-3343\" srcset=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/03\/2019-03-12-02-08-34-Cbas-657x1024.jpg 657w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/03\/2019-03-12-02-08-34-Cbas-192x300.jpg 192w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/03\/2019-03-12-02-08-34-Cbas-768x1197.jpg 768w\" sizes=\"(max-width: 657px) 100vw, 657px\" \/><\/figure><\/li><\/ul><\/figure>\n\n\n\n<p>Le syst\u00e8me est compos\u00e9 :<\/p>\n\n\n\n<ul><li>D&rsquo;un rail motoris\u00e9 avec un moteur pas \u00e0 pas<\/li><li>D&rsquo;une carte pilote DRV8825<\/li><li>D&rsquo;un module de contr\u00f4le mont\u00e9 avec un circuit ESP32  <\/li><\/ul>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Rail motoris\u00e9 pour macrophotographie\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/HX9agO6AD_o?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Le rail motoris\u00e9<\/h4>\n\n\n\n<p>Le rail motoris\u00e9 a 270mm de long pour un d\u00e9placement utile de 100mm. L&rsquo;entrainement est constitu\u00e9 d&rsquo;une vis sans fin avec billes dont le d\u00e9placement par pas est de 0,02mm.<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><a href=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/DBX1204-100_03.jpg\" target=\"_blank\" rel=\"noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/DBX1204-100_03.jpg\" alt=\"\" class=\"wp-image-3083\" width=\"576\" height=\"742\" srcset=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/DBX1204-100_03.jpg 758w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/DBX1204-100_03-233x300.jpg 233w\" sizes=\"(max-width: 576px) 100vw, 576px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"667\" height=\"530\" src=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/DBX1204-100_00b.jpg\" alt=\"\" class=\"wp-image-3089\" srcset=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/DBX1204-100_00b.jpg 667w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/DBX1204-100_00b-300x238.jpg 300w\" sizes=\"(max-width: 667px) 100vw, 667px\" \/><\/figure>\n\n\n\n<p><a aria-label=\"Ce rail est disponible chez Banggood.com (ouverture dans un nouvel onglet)\" href=\"https:\/\/www.banggood.com\/100mm-Long-Stage-Actuator-1204-Ball-Screw-Linear-Slide-Stroke-With-42mm-Stepper-Motor-p-1142419.html?rmmds=myorder&amp;cur_warehouse=CN\" target=\"_blank\" rel=\"noreferrer noopener\">Ce rail est disponible chez Banggood.com&nbsp;(j&rsquo;ai pay\u00e9 19,47$&nbsp;CAD&nbsp;de&nbsp;frais&nbsp;de&nbsp;douane)<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Le pilote DRV8825<\/h4>\n\n\n\n<p>Le DRV8825 est une carte opto-isol\u00e9e pour piloter un moteur pas \u00e0 pas bipolaire<\/p>\n\n\n\n<figure class=\"wp-block-gallery columns-2 is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" decoding=\"async\" width=\"937\" height=\"1024\" src=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/DRV8825-1-937x1024.jpg\" alt=\"\" data-id=\"3092\" data-link=\"https:\/\/espacerm.com\/webgen\/rail-motorise-pour-macrophotographie\/drv8825-2\/\" class=\"wp-image-3092\" srcset=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/DRV8825-1-937x1024.jpg 937w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/DRV8825-1-275x300.jpg 275w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/DRV8825-1-768x839.jpg 768w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/DRV8825-1.jpg 1024w\" sizes=\"(max-width: 937px) 100vw, 937px\" \/><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"850\" src=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/DSC_2943-Modifier-1024x850.jpg\" alt=\"\" data-id=\"3093\" data-link=\"https:\/\/espacerm.com\/webgen\/rail-motorise-pour-macrophotographie\/dsc_2943-modifier\/\" class=\"wp-image-3093\" srcset=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/DSC_2943-Modifier-1024x850.jpg 1024w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/DSC_2943-Modifier-300x249.jpg 300w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/DSC_2943-Modifier-768x638.jpg 768w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/DSC_2943-Modifier.jpg 1301w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/li><\/ul><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\"><a href=\"https:\/\/www.pololu.com\/product\/2133\" target=\"_blank\" rel=\"noreferrer noopener\">DRV8825 Stepper Motor Driver Carrier, High Current<\/a><\/h4>\n\n\n\n<h4 class=\"wp-block-heading\"><a href=\"https:\/\/wiki.mchobby.be\/index.php?title=DRV8825\" target=\"_blank\" rel=\"noreferrer noopener\">DRV8825 (fr)<\/a><\/h4>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h4 class=\"wp-block-heading\"> <br>Module de contr\u00f4le <\/h4>\n\n\n\n<p>Le module de contr\u00f4le est mont\u00e9 avec un circuit de d\u00e9veloppement \u00ab<a href=\"https:\/\/espacerm.com\/webgen\/esp32-devkit-v1-doit-bouclier-dextension-et-declencheur-de-relais\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"ESP32 DEVKIT V1 DOIT (ouverture dans un nouvel onglet)\">ESP32 DEVKIT V1 DOIT<\/a>\u00bb.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/IMG_5532sd.jpg\" target=\"_blank\" rel=\"noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"2592\" height=\"1933\" src=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/IMG_5532sd.jpg\" alt=\"\" class=\"wp-image-3174\" srcset=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/IMG_5532sd.jpg 2592w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/IMG_5532sd-300x224.jpg 300w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/IMG_5532sd-768x573.jpg 768w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/IMG_5532sd-1024x764.jpg 1024w\" sizes=\"(max-width: 2592px) 100vw, 2592px\" \/><\/a><\/figure>\n\n\n\n<p>Le ESP32 int\u00e8gre l&rsquo;interface Wifi. Le syst\u00e8me se commande avec un navigateur standard.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/03\/2250008.jpg\" target=\"_blank\" rel=\"noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"679\" src=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/03\/2250008-1024x679.jpg\" alt=\"\" class=\"wp-image-3425\" srcset=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/03\/2250008-1024x679.jpg 1024w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/03\/2250008-300x199.jpg 300w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/03\/2250008-768x510.jpg 768w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/03\/2250008.jpg 1507w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Le sch\u00e9ma \u00e9lectronique<\/h4>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/03\/Sch\u00e9ma-contr\u00f4leur_rail-et-d\u00e9clencheur_00.jpg\" target=\"_blank\" rel=\"noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"612\" src=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/03\/Sch\u00e9ma-contr\u00f4leur_rail-et-d\u00e9clencheur_00-1024x612.jpg\" alt=\"\" class=\"wp-image-3329\" srcset=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/03\/Sch\u00e9ma-contr\u00f4leur_rail-et-d\u00e9clencheur_00-1024x612.jpg 1024w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/03\/Sch\u00e9ma-contr\u00f4leur_rail-et-d\u00e9clencheur_00-300x179.jpg 300w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/03\/Sch\u00e9ma-contr\u00f4leur_rail-et-d\u00e9clencheur_00-768x459.jpg 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">L&rsquo;interface WEB<\/h4>\n\n\n\n<p>L&rsquo;interface utilisateur est d\u00e9velopp\u00e9e pour \u00eatre compatible aux navigateurs des diff\u00e9rentes plateformes.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/interface-web_01.jpg\" target=\"_blank\" rel=\"noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"577\" src=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/interface-web_01-1024x577.jpg\" alt=\"\" class=\"wp-image-3155\" srcset=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/interface-web_01-1024x577.jpg 1024w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/interface-web_01-300x169.jpg 300w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/interface-web_01-768x433.jpg 768w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/interface-web_01.jpg 1029w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>L&rsquo;utilisateur a le choix de d\u00e9placer manuellement l&rsquo;appareil photo selon 3 \u00e9carts de d\u00e9placement; court, moyen et long. Il peut d\u00e9clencher l&rsquo;appareil photo avec le bouton \u00abPhotoClic\u00bb. La capture des photos est lanc\u00e9e par la s\u00e9lection d&rsquo;un des boutons \u00ab<strong>Capture<\/strong>\u00bb. Le bouton \u00ab<strong>Actualiser\u00bb<\/strong> rafra\u00eechi la page pour afficher le suivi d&rsquo;avancement des captures.<\/p>\n\n\n\n<p>L&rsquo;utilisateur peut configurer la capture automatis\u00e9e en fonction du pas, de la distance ou selon des points de rep\u00e8re qu&rsquo;il fixera.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/interface-web_03.jpg\" target=\"_blank\" rel=\"noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"973\" height=\"670\" src=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/interface-web_03.jpg\" alt=\"\" class=\"wp-image-3157\" srcset=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/interface-web_03.jpg 973w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/interface-web_03-300x207.jpg 300w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/interface-web_03-768x529.jpg 768w\" sizes=\"(max-width: 973px) 100vw, 973px\" \/><\/a><\/figure>\n\n\n\n<p>La \u00ab<strong>r\u00e9solution du rail\u00bb<\/strong> d\u00e9finie de combien de mm se d\u00e9place le rail suite \u00e0 une commande de d\u00e9placement d&rsquo;un pas. <\/p>\n\n\n\n<p>Le \u00ab<strong>d\u00e9lai avant d\u00e9clenchement<\/strong>\u00bb d\u00e9bute \u00e0 la fin d&rsquo;un d\u00e9placement. \u00c0 l&rsquo;expiration du d\u00e9lai, une commande de d\u00e9clenchement de l&rsquo;appareil photo est envoy\u00e9e. Cette pause a pour but de laisser le temps \u00e0 l&rsquo;appareil photo de se stabiliser afin d&rsquo;\u00e9viter le flou de bouger.  Un temps de 2 \u00e0 3 secondes est requis.<\/p>\n\n\n\n<p>Le \u00ab<strong>d\u00e9lai apr\u00e8s d\u00e9clenchement<\/strong>\u00bb  permet de s&rsquo;assurer de ne pas envoyer une commande de d\u00e9clenchement avant la fin du temps d&rsquo;exposition configurer sur l&rsquo;appareil photo. Ce temps doit aussi tenir compte du temps de traitement du bruit num\u00e9rique pour les longues expositions, selon le mod\u00e8le d&rsquo;appareil photo. Ce qui est normalement \u00e9gal au temps d&rsquo;exposition. En g\u00e9n\u00e9ral, ce traitement est actif pour des temps d&rsquo;obturation plus grands que 1 seconde.  <\/p>\n\n\n\n<p><strong>D\u00e9lai apr\u00e8s d\u00e9clenchement<\/strong> &gt; Temps d&rsquo;obturation + temps de r\u00e9duction de bruit num\u00e9rique <\/p>\n\n\n\n<br>\n\n\n\n<p><strong>Affichage des param\u00e8tres entr\u00e9s<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/interface-web_02-1.jpg\" target=\"_blank\" rel=\"noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"968\" height=\"571\" src=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/interface-web_02-1.jpg\" alt=\"\" class=\"wp-image-3158\" srcset=\"https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/interface-web_02-1.jpg 968w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/interface-web_02-1-300x177.jpg 300w, https:\/\/espacerm.com\/webgen\/wp-content\/uploads\/2019\/02\/interface-web_02-1-768x453.jpg 768w\" sizes=\"(max-width: 968px) 100vw, 968px\" \/><\/a><\/figure>\n\n\n\n<p><strong>Fixation des points de rep\u00e8res<\/strong><\/p>\n\n\n\n<p>L&rsquo;utilisateur d\u00e9place le rail \u00e0 la position de d\u00e9part de la capture et clique sur le bouton \u00ab<strong>A<\/strong>\u00bb<\/p>\n\n\n\n<p>L&rsquo;utilisateur d\u00e9place le rail \u00e0 la position de fin de capture et clique sur le bouton \u00ab<strong>B<\/strong>\u00bb<\/p>\n\n\n\n<p>Pour l&rsquo;\u00e9tape suivante, l&rsquo;utilisateur configure la distance entre les captures dans la fen\u00eatre \u00abPARAM\u00c8TRES VERSUS REP\u00c8RES\u00bb et clique sur le bouton \u00ab<strong>Soumettre<\/strong>\u00bb<\/p>\n\n\n\n<p>Il ne reste plus qu&rsquo;\u00e0 cliquer sur le bouton \u00ab<strong>Capture<\/strong>\u00bb selon la direction requise pour la prise de photos.<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p><a href=\"https:\/\/espacerm.com\/webgen\/declechement-dun-appareil-photo\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"D\u00e9clenchement d\u2019appareil photo et de flashs (ouverture dans un nouvel onglet)\">D\u00e9clenchement d\u2019appareil photo et de flashs<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Le programme<\/h3>\n\n\n\n<p>Le programme est divis\u00e9 en huit fichiers. Ils doivent \u00eatre plac\u00e9s dans le m\u00eame r\u00e9pertoire nomm\u00e9 \u00ab<strong>Pilote_Rail_Macro_et_Declencheur_00<\/strong>\u00bb <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">T\u00e9l\u00e9chargement<\/h4>\n\n\n\n<p><a aria-label=\" (ouverture dans un nouvel onglet)\" href=\"https:\/\/github.com\/rcepmorel\/Pilote_Rail_Macro_et_Declencheur\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/rcepmorel\/Pilote_Rail_Macro_et_Declencheur<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h4 class=\"wp-block-heading\"><br><strong>D\u00e9tails des fichiers<\/strong><\/h4>\n\n\n\n<p><strong>Pilote_Rail_Macro_et_Declencheur_00.ino<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/*      Pilote_Rail_Macro_et_Declencheur\n* \n* Auteur : Richard Morel\n*     2019-02-05\n* \n* Modification\n*     \n*     \n* Remarques :     \n* \n* Si l'application ne r\u00e9ussit pas \u00e0 se connecter sur un r\u00e9seau Wifi, \n* elle configurera le circuit comme un point d'acc\u00e8s r\u00e9seau Wifi\n* Son adresse IP sera alors 192.168.4.1.\n* DEL : Vert  -> Brancher sur le r\u00e9seau WiFi d\u00e9fini dans le programme\n* DEL : Rouge -> Point d'acc\u00e8s WiFi\n* \n* do_Web_1_Colonne.h  -> Affichage plus adapt\u00e9 aux petits \u00e9crans \n*                        comme ceux des t\u00e9l\u00e9phones intelligents\n* \n* do_Web_2_Colonnes.h -> Pour les autres dimensions d'\u00e9crans\n* \n* \n*\/  \n\/\/ ----------------------------------------------------------------------------- \n\/\/             Importation des fichiers et d\u00e9finition des variables\n\/\/ ----------------------------------------------------------------------------- \n#include \"configuration.h\"\n#include \"do_Conversion_calcul.h\"\n#include \"do_Commandes.h\"\n\n\/\/******  WIFI *********************\n#include \"connect_id_Wifi.h\"\n#include &lt;WiFi.h>\nWiFiServer server(80);\n\nconst char* chStatusWifi[] ={\"WL_IDLE_STATUS\", \"WL_NO_SSID_AVAIL\", \"-\", \n                       \"WL_CONNECTED \", \"WL_CONNECT_FAILED \", \"-\",\n                       \"WL_DISCONNECTED\"};\n\nString stWifiConnectionNetwork = \"Connect\u00e9\";\n\n\/\/#include \"do_Web_1_Colonne.h\" \/\/ Affichage plus adapt\u00e9 aux petits \u00e9crans \n                                \/\/ comme ceux des t\u00e9l\u00e9phones intelligents\n#include \"do_Web_2_Colonnes.h\"\n#include \"actions.h\"\n\n\/\/ -------------------------------------------------------------------------------\n\/\/ FONCTION     FONCTION     FONCTION    FONCTION     FONCTION     FONCTION\n\/\/ ------------------------------------------------------------------------------- \n\n\/\/*****  Activation de la DEL   *****************\nvoid ledcAnalogWrite(uint8_t channel, uint32_t value, uint32_t valueMax = 255) {\n  \/\/ calculate duty, 8191 from 2 ^ 13 - 1\n  if (value > valueMax){value = valueMax;}\n  uint32_t duty = (8191 \/ valueMax) * value;\n  \n  \/\/ write duty to LEDC\n  ledcWrite(channel, duty);\n}\n\n\n\/\/*****  Choix d'affichage de la couleur de la DEL *******\nvoid AfficheVertCWRougePA(){\n   if (stWifiConnectionNetwork==\"Non connect\u00e9 au r\u00e9seau\") {\n      byBrightnessVert  = 0 ;\n      byBrightnessRouge = 255 ;\n      \/\/ set the brightness on LEDC channel 0\n      ledcAnalogWrite(LEDC_CHANNEL_0_VERT, byBrightnessVert);\n      \/\/ set the brightness on LEDC channel 1\n      ledcAnalogWrite(LEDC_CHANNEL_1_ROUGE,byBrightnessRouge);\n  }\n  else  \n  {\n      byBrightnessVert  = 255;\n      byBrightnessRouge = 0 ;\n      ledcAnalogWrite(LEDC_CHANNEL_0_VERT, byBrightnessVert);\n      ledcAnalogWrite(LEDC_CHANNEL_1_ROUGE,byBrightnessRouge);\n  }\n}\n\n\n\/\/*********** Ex\u00e9cution des commandes re\u00e7ues *********\nvoid do_ExecCommande(){ \n  if (boExecDeclencheApp){\n     boExecDeclencheApp = false;\n     strDirectionRef=\"\";\n     declencheApp();  \n  }\n  if (boExecAvanceLente){\n     boExecAvanceLente = false;\n     go_AvanceLente();  \n     }    \n  if (boExecAvanceRapide) {\n     boExecAvanceRapide = false;\n     go_AvanceRapide();     \n  } \n  if (boExecAvanceTresRapide) {\n     boExecAvanceTresRapide = false; \n     go_AvanceTresRapide(); \n  }       \n  if (boExecStop) {\n     boExecStop = false;\n     compteur = intNbreDeBoucle;\n     stop_Stop();  \n  }\n  if (boExecReculeLente) {\n     boExecReculeLente = false;\n     go_ReculeLente();    \n  }    \n  if (boExecReculeRapide) {\n     boExecReculeRapide = false;\n     go_ReculeRapide();   \n  } \n  if (boExecReculeTresRapide) {\n     boExecReculeTresRapide = false;\n     go_ReculeTresRapide();   \n  } \n  if (boExecRepereA) {\n     boExecRepereA = false;\n     intCompteurdePasRef = 0;\n     strDirectionRef=\"\"; \n  } \n  if (boExecRepereB) {\n     boExecRepereB = false;\n     strDirectionRef=\"\";\n  } \n  if (boExecAvanceCapture) {\n     boExecAvanceCapture = false;\n     go_AvanceCapture();  \n  }\n  if (boExecReculeCapture) {\n     boExecReculeCapture = false;\n     go_ReculeCapture();   \n   }\n}\n\n\/\/ -------------------------------------------------------------------------------\n\/\/ SETUP   SETUP   SETUP   SETUP   SETUP   SETUP   SETUP   SETUP   SETUP   SETUP\n\/\/ ------------------------------------------------------------------------------- \nvoid setup() {\n  Serial.begin(115200);\n  Serial.println(\"INITIALISATION EN COURS\");\n\n  \/\/**********  ENTR\u00c9ES - SORTIES *************\n  pinMode( pinEnable8825,     OUTPUT );\n  pinMode( pinDir8825,        OUTPUT );\n  pinMode( pinStep8825,       OUTPUT );\n  pinMode( PIN_ACTIVE_RELAIS, OUTPUT );\n  pinMode( PinIntFinAVNC,     INPUT_PULLUP ); \/\/ d\u00e9tecteur de fin de rail\n  pinMode( PinIntFinRCL,      INPUT_PULLUP ); \/\/ d\u00e9tecteur de fin de rail\n\n  digitalWrite( PIN_ACTIVE_RELAIS, LOW);\n \n  \/\/ *********** WIFI ****************************\n  \n  \/\/ ** Configuration d'une adresse IP statique **\n  if (!WiFi.config(local_IP, gateway, subnet)) {\n    Serial.println(\"STA Impossible de configurer\");\n  }\n  \n  WiFi.begin(ssid, password);\n  delay(1000);\n  uint8_t retries = 15;\n \n  while (WiFi.status() != WL_CONNECTED) {\n      delay(500);\n      Serial.print(\"..\");\n      Serial.print(WiFi.status());\n      Serial.print(\"-\");\n      Serial.println(retries);\n      retries--;\n      if (retries == 0) {\n        int intStatus = WiFi.status();\n        if (intStatus==255){intStatus=2;}\n        Serial.print(\"..\");\n        Serial.print(WiFi.status());\n        Serial.print(\"-\");\n        Serial.println(retries);\n        Serial.print(\"WiFi status :\");\n        Serial.print(WiFi.status());\n        Serial.print(\"->\");\n        Serial.println(chStatusWifi[intStatus]); \n        stWifiConnectionNetwork = \"Non connect\u00e9 au r\u00e9seau\";\n        break;\n      }\n  }\n\n    Serial.println(stWifiConnectionNetwork);\n  \/\/ ** Si Non connect\u00e9 : D\u00e9marrage en mode POINT D'ACC\u00c8S **\n  if (stWifiConnectionNetwork==\"Non connect\u00e9 au r\u00e9seau\") {\n     Serial.println(\"- * Activation du point d'acc\u00e8s Wifi * - \");\n     WiFi.softAP(ssid_AP, password_AP);\n     IPAddress myIP = WiFi.softAPIP();\n     Serial.print(\"AP IP address: \");\n     Serial.println(myIP);\n  }\n  else{\n  Serial.print(\"WiFi status :\");\n  Serial.println(WiFi.status());\n  Serial.println(\"\");\n  Serial.println(\"WiFi connected.\");\n  Serial.println(\"IP address: \");\n  Serial.println(WiFi.localIP());\n  }\n    \n   server.begin();\n\n    \n  \/\/**********  DEL *************\n  \/\/ Configurer la minuterie et attacher la minuterie \u00e0 la DEL\n  ledcSetup(LEDC_CHANNEL_0_VERT, LEDC_BASE_FREQ, LEDC_TIMER_13_BIT);\n  ledcAttachPin(DELVERTE, LEDC_CHANNEL_0_VERT);\n  ledcSetup(LEDC_CHANNEL_1_ROUGE, LEDC_BASE_FREQ, LEDC_TIMER_13_BIT);\n  ledcAttachPin(DELROUGE, LEDC_CHANNEL_1_ROUGE);\n\n  AfficheVertCWRougePA();\n  \n  Serial.println(\"PR\u00caT\");\n}\n\n\/\/ ------------------------------------------------------------------------------- \n\/\/ LOOP     LOOP     LOOP     LOOP     LOOP     LOOP     LOOP     LOOP     LOOP \n\/\/ ------------------------------------------------------------------------------- \nvoid loop() {   \n  do_Web();\n  do_ExecCommande();\n  compteur = 0;\n}\n<\/pre>\n\n\n\n<br>\n\n\n\n<p><strong>configuration.h<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/******* Affichage DEL ********\n\/\/ Afin d'ajuster au besoin l'intensit\u00e9 et la couleur de la DEL, le programme\n\/\/ fait appel une fonction (ledcWrite) qui module la sortie PWM des broches\n\/\/ selon la valeur fournie \u00e0 la fonction\n#define LEDC_CHANNEL_0_VERT     0\n#define LEDC_CHANNEL_1_ROUGE    1\n\n\/\/ use 13 bit precission for LEDC timer\n#define LEDC_TIMER_13_BIT  13\n\n\/\/ use 5000 Hz as a LEDC base frequency\n#define LEDC_BASE_FREQ     5000\n\n#define DELROUGE  12 \/\/ DEL rouge reli\u00e9e au GPIO12\n#define DELVERTE  13 \/\/ DEL verte reli\u00e9e au GPIO13\n\nbyte byBrightnessVert;\nbyte byBrightnessRouge;\n\n\n#define PIN_ACTIVE_RELAIS           32   \/\/ D\u00e9clenche l'appareil photo+flashs\n\n#define pinDir8825                  14   \/\/ Direction\n#define pinStep8825                 27   \/\/ Signal de PAS (avancement) PWM\n#define pinEnable8825               25   \/\/ Activation du driver\/pilote\n#define PinIntFinRCL                26   \/\/ D\u00e9tecteur de fin de rail\n#define PinIntFinAVNC               33   \/\/ D\u00e9tecteur de fin de rail\n\n\/\/ **** DRV8825 et Nema 17 17HD48002H-22B V sur le potentiom\u00e8tre ajust\u00e9 \u00e0 0,585V ***\n\/\/ microseconde (minimum 600 pour Nema 17, plus rapide, moins bruyant)\n\/\/ microseconde (minimum 900 pour le rail DBX1204-100, plus rapide, moins bruyant)\nint timePulseStep                 = 900; \nint i                             = 0;   \/\/ Compteur pour la boucle NbreDePasEntreArret\nint compteur                      = 0;   \/\/ Compteur pour la boucle NbreDeBoucle\nint intPasAccompli                = 0;\n\nint intDelaiAvantDeclenchement    = 1000;  \/\/ milliseconde ( 1 seconde d'arr\u00eat puis d\u00e9clenche )\n\nint intNbreDePasEntreArrets       = 500;   \/\/ 100 pour 1 mm pour le nema 17 , le DBX1204-100 2 mm\nint intNbreDeBoucle               = 4;\nint intDelaiApresDeclenchement    = 1000;\n\nint intNbreDePasEntreArretsB      = 0;\nint intNbreDeBoucleB              = 0;\nint intDelaiInterBoucleB          = 0;\n\nfloat fltDistParPas               = 0.020; \/\/ mm, 10 um pour 1 pas Nema 17 plus vis\nfloat fltDistanceEntreCapture     = 0;     \/\/ distance fonction du nombre de pas, dimension d'une tranche\nfloat fltDeplacementTotal         = 0;     \/\/ distance totale parcourue selon le nombre de pas et de boucle\nfloat fltNbreDePasEntreArrets     = 0;     \/\/ Nombre de pas par boucle\n\nString strDistParPas              = \"0.02\";\nString strNbreDePasEntreArrets    = \"-\";\nString strNbreDeBoucle            = \"-\";\nString strDelaiApresDeclenchement = \"-\";\nString strDelaiAvantDeclenchement = \"-\";\nString strDeplacementTotal        = \"-\";\n\nString strDistanceEntreCaptureVD  = \"-\";\n\nString strDistanceEntreCaptureVR  = \"-\";\n\nint intRetourAuto                 = 1;    \/\/ Retour automatique au point de d\u00e9part apr\u00e8s une capture\nint intDesacMotPauseBcl           = 1;    \/\/ D\u00e9sactive le moteur entre chaque boucle\nint intStopFinBoucles             = 1;    \/\/ D\u00e9sactive le moteur \u00e0 la fin des boucles\n\n\nint intCompteurdePasRef           = 0;\nString strDirectionRef            = \"\";\n\nString currentLine                = \"\";    \/\/ Variable de type String pour contenir\n                                           \/\/ les donn\u00e9es entrantes du client\nbool bolSetParametreRepere        = false;\nbool boExecDeclencheApp           = false;\nbool boExecAvanceLente            = false;\nbool boExecAvanceRapide           = false;\nbool boExecAvanceTresRapide       = false; \nbool boExecStop                   = false;\nbool boExecReculeLente            = false;\nbool boExecReculeRapide           = false;\nbool boExecReculeTresRapide       = false;\nbool boExecRepereA                = false;\nbool boExecRepereB                = false;\nbool boExecAvanceCapture          = false;\nbool boExecReculeCapture          = false;\n\n<\/pre>\n\n\n\n<br>\n\n\n\n<p><strong>connect_id_Wifi.h<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\ufeffconst char* ssid     = \"Votre nom de r\u00e9seau WiFi\"; \/\/ R\u00e9seau \u00e0 acc\u00e9der\nconst char* password = \"Mot de passe du r\u00e9seau WiFi\";\n\nconst char* ssid_AP = \"PointDAccesRail\"; \/\/ Point d'acc\u00e8s \nconst char* password_AP = \"aVotreGuise\";\n\n\n\/\/ Configuration adresse IP statique\nIPAddress local_IP(192, 168, 1, 141);\n\/\/ Adresse IP de votre Passerelle\nIPAddress gateway(192, 168, 1, 1);\n\nIPAddress subnet(255, 255, 0, 0);\n<\/pre>\n\n\n\n<br>\n\n\n\n<p><strong>actions.h<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/*************   Avancement - Chariot en fin de course ***************\nvoid test_FinAVNC()                    \n{\n  if (digitalRead(PinIntFinAVNC) == HIGH) {\n    digitalWrite(pinEnable8825, LOW);  \/\/ Active la sortie moteur\n  } else {\n    digitalWrite(pinEnable8825, HIGH); \/\/ D\u00e9sactive la sortie moteur\n    Serial.print( \"RENDU EN FIN DE COURSE - \" );\n    intNbreDePasEntreArretsB = 0;\n    intNbreDeBoucleB         = 0;\n    intDelaiInterBoucleB     = 0; \n  }\n}\n\n\/\/*************  Recul - Chariot en fin de course *********************\nvoid test_FinRCL()                     \n{\n  if (digitalRead(PinIntFinRCL) == HIGH) {\n    digitalWrite(pinEnable8825, LOW);   \/\/ Active la sortie moteur\n  } else {\n    digitalWrite(pinEnable8825, HIGH);  \/\/ D\u00e9sactive la sortie moteur\n    Serial.print( \"RENDU EN FIN DE COURSE - \" );\n    intNbreDePasEntreArretsB = 0;\n    intNbreDeBoucleB         = 0;\n    intDelaiInterBoucleB     = 0;\n  }\n}\n\n\n\/\/*****************   D\u00e9clenche l'appareil photo   ********************\nvoid declencheApp(){                  \n  Serial.println( \"CLICK \" );\n  digitalWrite( PIN_ACTIVE_RELAIS, HIGH);           \n  delay(100);\n  digitalWrite( PIN_ACTIVE_RELAIS, LOW);\n  delay(intDelaiApresDeclenchement);  \/\/ D\u00e9lai apr\u00e8s d\u00e9clenchement\n  \n  } \n\n\/\/*****************   Ex\u00e9cute le d\u00e9placement vers l'avant   ********************\nvoid execDeplacementAvance(){ \n  \/\/ intCompteurdePasRef -> sert pour accumuler le nombre de pas \n  \/\/ entre la r\u00e9f\u00e9rence A et la r\u00e9f\u00e9rence B\n  \/\/ Si intCompteurdePasRef == 0 , on \u00e9tabli la direction\n  \/\/ d'incr\u00e9mentation du calcul de pas \n                     \n  if ((intCompteurdePasRef == 0)&amp;&amp;( strDirectionRef==\"\"))\n    {\n      strDirectionRef = \"Avance\";\n    }\n  for ( compteur = 0; compteur &lt; intNbreDeBoucleB; compteur++) {\n    \/\/ Avance de X pas\n    for ( i = 0; i &lt; intNbreDePasEntreArretsB; i++) {\n      test_FinAVNC();\n      digitalWrite( pinStep8825, HIGH );\n      delayMicroseconds(timePulseStep);\n      digitalWrite( pinStep8825, LOW );\n      delayMicroseconds(timePulseStep);\n      if (strDirectionRef == \"Avance\")\n        {\n          intCompteurdePasRef++;\n        }\n        else\n        {\n          intCompteurdePasRef --;\n        }\n    }\n    if (intDesacMotPauseBcl== 1){digitalWrite( pinEnable8825, HIGH );}\n    delay(intDelaiInterBoucleB); \n  }\n  if (intStopFinBoucles == 1){digitalWrite( pinEnable8825, HIGH );}\n}\n\n\/\/*****************   Ex\u00e9cute le d\u00e9placement vers l'arri\u00e8re   ********************\nvoid execDeplacementRecule(){ \n    if ((intCompteurdePasRef == 0)&amp;&amp;( strDirectionRef==\"\"))\n    {\n      strDirectionRef = \"Recule\";\n    }\n  for ( compteur = 0; compteur &lt; intNbreDeBoucleB; compteur++) {\n    \/\/ Avance de X pas\n    for ( i = 0; i &lt; intNbreDePasEntreArretsB; i++) {\n      test_FinRCL();\n      digitalWrite( pinStep8825, HIGH );\n      delayMicroseconds(timePulseStep);\n      digitalWrite( pinStep8825, LOW );\n      delayMicroseconds(timePulseStep);\n      if (strDirectionRef == \"Recule\")\n        {\n          intCompteurdePasRef++;\n        }\n        else \n        {\n          intCompteurdePasRef --;\n        }      \n    }\n    if (intDesacMotPauseBcl== 1){digitalWrite( pinEnable8825, HIGH );} \n    delay(intDelaiInterBoucleB);      \/\/ attente\n  }\n  if (intStopFinBoucles == 1){digitalWrite( pinEnable8825, HIGH );}\n}\n  \n\/\/*****************   Avance tr\u00e8s rapide   *****************************\nvoid go_AvanceTresRapide()            \n{\n  digitalWrite( pinDir8825,    HIGH); \/\/ Direction avant\n  digitalWrite( pinStep8825,   LOW);  \/\/ Initialisation de la broche step\n  digitalWrite( pinEnable8825, LOW ); \/\/ Active la sortie moteur\n  intNbreDePasEntreArretsB   = 200;   \/\/ 200 * 0.02mm -> 4mm\n  intNbreDeBoucleB           = 10;    \/\/ 10*4mm -> 40 mm -> 4cm\n  intDelaiInterBoucleB       = 25; \n  execDeplacementAvance();\n  Serial.println( \"Avance tr\u00e8s rapide termin\u00e9e\" );\n}\n\n\/\/*****************   Avance rapide   *****************************\nvoid go_AvanceRapide()               \n{\n  digitalWrite( pinDir8825,    HIGH); \/\/ Direction avant\n  digitalWrite( pinStep8825,   LOW);  \/\/ Initialisation de la broche step\n  digitalWrite( pinEnable8825, LOW ); \/\/ Active la sortie moteur\n  intNbreDePasEntreArretsB   = 200;   \/\/ 200 * 0.02mm -> 4mm\n  intNbreDeBoucleB           = 3;     \/\/ 3*4mm -> 12 mm -> 1.2cm\n  intDelaiInterBoucleB       = 25; \n  execDeplacementAvance();\n  Serial.println( \"Avance rapide termin\u00e9e\" );\n}\n\n\/\/*****************   Avance lente   *****************************\nvoid go_AvanceLente()                 \/\/ Avance lente\n{\n  digitalWrite( pinDir8825,    HIGH); \/\/ Direction avant\n  digitalWrite( pinStep8825,   LOW);  \/\/ Initialisation de la broche step\n  digitalWrite( pinEnable8825, LOW ); \/\/ Active la sortie moteur\n  intNbreDePasEntreArretsB   = 25;    \/\/ 25 * 0.02mm -> 0.5mm\n  intNbreDeBoucleB           = 1;     \n  intDelaiInterBoucleB       = 0;\n  execDeplacementAvance();\n  Serial.println( \"Avance lente termin\u00e9e\" );\n}\n\n\/\/******************   Arr\u00eat du moteur  ********************************\nvoid stop_Stop()  \/\/Arr\u00eat du moteur\n{\n  digitalWrite( pinEnable8825, HIGH ); \/\/ D\u00e9sactive la sortie moteur\n  Serial.println( \"STOP\" );\n}\n\n\/\/*******************  Recule lente  ************************************\nvoid go_ReculeLente()                  \n{\n  digitalWrite( pinDir8825,    LOW);   \/\/ Direction recule\n  digitalWrite( pinStep8825,   LOW);   \/\/ Initialisation de la broche step\n  digitalWrite( pinEnable8825, LOW );  \/\/ Active la sortie moteur\n  intNbreDePasEntreArretsB   = 25;     \/\/ 25 * 0.02mm -> 0.5mm\n  intNbreDeBoucleB           = 1;      \n  intDelaiInterBoucleB       = 0;\n  execDeplacementRecule();\n  Serial.println( \"Recule termin\u00e9e\" );\n}\n\n\/\/*******************  Recule rapide  ***********************************\nvoid go_ReculeRapide()                \n{\n  digitalWrite( pinDir8825,    LOW);  \/\/ Direction recule\n  digitalWrite( pinStep8825,   LOW);  \/\/ Initialisation de la broche step\n  digitalWrite( pinEnable8825, LOW ); \/\/ Active la sortie moteur\n  intNbreDePasEntreArretsB   = 200;   \/\/ 200 * 0.02mm -> 4mm\n  intNbreDeBoucleB           = 3;     \/\/ 3*4mm -> 12 mm -> 1.2cm\n  intDelaiInterBoucleB       = 25;\n  execDeplacementRecule();\n  Serial.println( \"Recule rapide termin\u00e9e\" );\n}\n\n\/\/*******************  Recule tr\u00e8s rapide  *****************************\nvoid go_ReculeTresRapide()        \n{\n  digitalWrite( pinDir8825,    LOW);  \/\/ Direction recule\n  digitalWrite( pinStep8825,   LOW);  \/\/ Initialisation de la broche step\n  digitalWrite( pinEnable8825, LOW ); \/\/ Active la sortie moteur\n  intNbreDePasEntreArretsB   = 200;   \/\/ 200 * 0.02mm -> 4mm\n  intNbreDeBoucleB           = 10;    \/\/ 10*4mm -> 40 mm -> 4cm\n  intDelaiInterBoucleB       = 25;    \n  execDeplacementRecule();\n  Serial.println( \"Recule tr\u00e8s rapide termin\u00e9e\" );\n}\n\n\/\/-------------------- AVANCE CAPTURE ------------------------------- \nvoid go_AvanceCapture()                        \/\/ Avance et capture la photo\n{\n  digitalWrite( pinDir8825,  HIGH);            \/\/ Direction avant\n  digitalWrite( pinStep8825, LOW);             \/\/ Initialisation de la broche step\n  intPasAccompli = 0;\n  for ( compteur = 0; compteur &lt; intNbreDeBoucle; compteur++) {\n    declencheApp();                            \/\/ D\u00e9clenche l'appareil photo \n    digitalWrite( pinEnable8825, LOW );        \/\/ Active la sortie moteur\n    \/\/ Avance de X pas\n    for ( i = 0; i &lt; intNbreDePasEntreArrets; i++) {\n      test_FinAVNC();                          \/\/ V\u00e9rifie si arriv\u00e9 \u00e0 la fin du rail\n      if (digitalRead(PinIntFinAVNC) == LOW) {\n        i = intNbreDePasEntreArrets;\n        compteur  = intNbreDeBoucle;\n      }\n      intPasAccompli++;\n      digitalWrite( pinStep8825, HIGH );\n      delayMicroseconds(timePulseStep);\n      digitalWrite( pinStep8825, LOW );\n      delayMicroseconds(timePulseStep);\n    }\n    if (intDesacMotPauseBcl== 1){digitalWrite( pinEnable8825, HIGH );}\n          \n    \/\/******** Attention : \u00e9viter serial.println ici, cela fait planter l'application android\n    do_Web();                                  \/\/ Attention : ajoute un d\u00e9lai\n    if (boExecStop) {\n       boExecStop = false;\n       compteur   = intNbreDeBoucle;\n       stop_Stop();  \n    }\n    delay(intDelaiAvantDeclenchement);         \/\/ attente stabilit\u00e9 puis pose\n   Serial.println( String(compteur+1) + \"\/\" + String(intNbreDeBoucle)+ \" \" );   \n  }\n  declencheApp();                              \/\/ d\u00e9clenche l'appareil photo \n  Serial.println( \"Avance et capture termin\u00e9e\" );\n  if (intRetourAuto == 1)                      \/\/ retour au point de d\u00e9part\n  {\n    digitalWrite( pinDir8825,    LOW );        \/\/ inverse la direction\n    digitalWrite( pinEnable8825, LOW );        \/\/ Active la sortie moteur\n    for ( i = 0; i &lt; intPasAccompli; i++) {\n      digitalWrite( pinStep8825, HIGH );\n      delayMicroseconds(timePulseStep);\n      digitalWrite( pinStep8825, LOW );\n      delayMicroseconds(timePulseStep);\n      test_FinRCL();   \/\/ ne devrait pas arriver sauf par une erreur de manipulation\n      if (digitalRead(PinIntFinRCL) == LOW) {\n        i = intPasAccompli;\n      }\n    }\n  }\n  if (intStopFinBoucles == 1){digitalWrite( pinEnable8825, HIGH );}\n}\n\/\/----------------- RECULE CAPTURE --------------------------------------- \nvoid go_ReculeCapture()                        \/\/ Recule et capture la photo\n{\n  digitalWrite( pinDir8825,      LOW );        \/\/ Direction recule\n  digitalWrite( pinStep8825,     LOW ); \n  \n  intPasAccompli=0;\n  for ( compteur = 0; compteur &lt; intNbreDeBoucle; compteur++) {\n    declencheApp();                            \/\/ d\u00e9clenche l'appareil photo \n    digitalWrite( pinEnable8825, LOW );        \/\/ Active la sortie moteur    \n    \/\/ Avance de X pas\n    for ( i = 0; i &lt; intNbreDePasEntreArrets; i++) {\n      test_FinRCL();                           \/\/ V\u00e9rifie si arriv\u00e9 \u00e0 la fin du rail\n       if (digitalRead(PinIntFinRCL) == LOW) {\n        i = intNbreDePasEntreArrets;\n        compteur  = intNbreDeBoucle;\n      }\n      intPasAccompli++; \/\/ Accumule le nombre de pas accompli\n      digitalWrite( pinStep8825, HIGH );\n      delayMicroseconds(timePulseStep);\n      digitalWrite( pinStep8825, LOW );\n      delayMicroseconds(timePulseStep);\n    }\n    if (intDesacMotPauseBcl== 1){digitalWrite( pinEnable8825, HIGH );}\n      \n    \/\/******** Attention: \u00e9viter serial.println ici, cela fait planter l'application android\n    do_Web();                                 \/\/ Attention : ajoute un d\u00e9lai\n    if (boExecStop) {\n       boExecStop = false;\n       compteur = intNbreDeBoucle;\n       stop_Stop();  \n    }\n    Serial.println( String(compteur+1) + \"\/\" + String(intNbreDeBoucle)+ \" \" );\n    delay(intDelaiAvantDeclenchement);         \/\/ attente stabilit\u00e9 puis pose\n  } \/\/ fin de for ( compteur = 0; compteur &lt; intNbreDeBoucle; compteur++)\n  \n  declencheApp();                              \/\/ d\u00e9clenche l'appareil photo \n  Serial.println( \"Recule et capture termin\u00e9e\" );\n  if (intRetourAuto == 1)                      \/\/ retour au point de d\u00e9part\n  {\n    digitalWrite( pinDir8825   , HIGH);        \/\/ inverse la direction\n    digitalWrite( pinEnable8825, LOW );        \/\/ Active le moteur\n    for ( i = 0; i &lt; intPasAccompli; i++) {\n      digitalWrite( pinStep8825, HIGH );\n      delayMicroseconds(timePulseStep);\n      digitalWrite( pinStep8825, LOW );\n      delayMicroseconds(timePulseStep);\n      test_FinAVNC();\n       if (digitalRead(PinIntFinAVNC) == LOW) {\n        i = intPasAccompli;\n      }\n    }\n  }\n  if (intStopFinBoucles == 1){digitalWrite( pinEnable8825, HIGH );}\n}\n<\/pre>\n\n\n\n<br>\n\n\n\n<p><strong>do_Commandes.h<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ ------------------------------------------------------------------------------- \n\/\/                 Ex\u00e9cution des commandes re\u00e7ues\n\/\/ ------------------------------------------------------------------------------- \n\nvoid do_Commandes(){\n          \n         if (currentLine.startsWith(\"GET \/action_page.php?\")){\n         \/\/ Trouver la position du d\u00e9but de la donn\u00e9e de chaque variable et lire cette donn\u00e9e\n         int intPosResolutionDuRail = currentLine.indexOf(\"ResolutionDuRail=\");\n         int intPosDelaiAvantDeclenchement = currentLine.indexOf(\"DelaiAvantDeclenchement=\");\n         int intPosDelaiApresDeclenchement = currentLine.indexOf(\"DelaiApresDeclenchement=\");\n         int intPosDistanceEntreCaptureVR = currentLine.indexOf(\"DistanceEntreCaptureVR=\");\n         int intPosNbreDePasEntreArrets = currentLine.indexOf(\"NbreDePasEntreArrets=\");\n         int intPosNbreDeBoucle = currentLine.indexOf(\"NbreDeBoucle=\");\n         int intPosDistanceEntreCaptureVD = currentLine.indexOf(\"DistanceEntreCaptureVD=\");\n         int intPosDeplacementTotal = currentLine.indexOf(\"DeplacementTotal=\");\n         int intPosHTTP = currentLine.indexOf(\"HTTP\");\n           if (intPosResolutionDuRail >0) { \n             Serial.println(\"\");\n             Serial.println(\"***\" );\n             Serial.print(intPosResolutionDuRail);\n             Serial.println(\" position de ResolutionDuRail\" );\n             Serial.print(intPosDelaiAvantDeclenchement);\n             Serial.println(\" position de DelaiAvantDeclenchement\" );\n             Serial.print(intPosDelaiApresDeclenchement);\n             Serial.println(\" position de DelaiApresDeclenchement\" );\n             Serial.print(intPosDistanceEntreCaptureVR);\n             Serial.println(\" position de DistanceEntreCaptureVR\" );\n             Serial.print(intPosNbreDePasEntreArrets);\n             Serial.println(\" position de NbreDePasEntreArrets\" );\n             Serial.print(intPosNbreDeBoucle);\n             Serial.println(\" position de NbreDeBoucle\" );\n             Serial.print(intPosDistanceEntreCaptureVD);\n             Serial.println(\" position de DistanceEntreCaptureVD\" );\n             Serial.print(intPosDeplacementTotal);\n             Serial.println(\" position de DeplacementTotal\" );\n             \/\/Serial.println(currentLine);\n\n             strDistParPas = currentLine.substring(intPosResolutionDuRail+17,intPosDelaiAvantDeclenchement-1);\n             strDelaiAvantDeclenchement = currentLine.substring(intPosDelaiAvantDeclenchement+24,intPosDelaiApresDeclenchement-1);\n             strDelaiApresDeclenchement = currentLine.substring(intPosDelaiApresDeclenchement+24,intPosDistanceEntreCaptureVR-1);\n             strDistanceEntreCaptureVR = currentLine.substring(intPosDistanceEntreCaptureVR+23,intPosNbreDePasEntreArrets-1);\n             strNbreDePasEntreArrets = currentLine.substring(intPosNbreDePasEntreArrets+21,intPosNbreDeBoucle-1);\n             strNbreDeBoucle = currentLine.substring(intPosNbreDeBoucle+13,intPosDistanceEntreCaptureVD-1);\n             strDistanceEntreCaptureVD = currentLine.substring(intPosDistanceEntreCaptureVD+23,intPosDeplacementTotal-1);\n             strDeplacementTotal = currentLine.substring(intPosDeplacementTotal+17,intPosHTTP-1);\n                \n             do_Conversion_calcul();\n             bolSetParametreRepere = false;\n           }                \/\/ fin du if (intPosResolutionDuRail >0) { \n        }                   \/\/ fin du if (currentLine.startsWith(\"GET \/action_page.php?\")){\n           \n        if (currentLine.endsWith(\"GET \/PhotoClic HTTP\/1.1\")) {\n           boExecDeclencheApp = true; \n        }\n        \n        if (currentLine.endsWith(\"GET \/AvanceLente HTTP\/1.1\")) {\n           boExecAvanceLente = true;  \n        }    \n        if (currentLine.endsWith(\"GET \/AvanceRapide HTTP\/1.1\")) {\n           boExecAvanceRapide = true; \n        } \n        if (currentLine.endsWith(\"GET \/AvanceTresRapide HTTP\/1.1\")) {\n           boExecAvanceTresRapide = true; \n        }       \n        if (currentLine.endsWith(\"GET \/STOP HTTP\/1.1\")) {\n           boExecStop = true;;  \n        }\n        if (currentLine.endsWith(\"GET \/ReculeLente HTTP\/1.1\")) {\n           boExecReculeLente = true;  \n        }    \n        if (currentLine.endsWith(\"GET \/ReculeRapide HTTP\/1.1\")) {\n           boExecReculeRapide = true;\n        } \n        if (currentLine.endsWith(\"GET \/ReculeTresRapide HTTP\/1.1\")) {\n           boExecReculeTresRapide = true;  \n        } \n        if (currentLine.endsWith(\"GET \/RepereA HTTP\/1.1\")) {\n           boExecRepereA = true;    \n        } \n        if (currentLine.endsWith(\"GET \/RepereB HTTP\/1.1\")) {\n           boExecRepereB = true; \n           bolSetParametreRepere = true;\n        } \n        if (currentLine.endsWith(\"GET \/ACapture HTTP\/1.1\")) {\n           boExecAvanceCapture = true;    \n        }\n        if (currentLine.endsWith(\"GET \/RCapture HTTP\/1.1\")) {\n           boExecReculeCapture = true;   \n        }\n\n}\n<\/pre>\n\n\n\n<br>\n\n\n\n<p><strong>do_Conversion_Calcul.h<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ ------------------------------------------------------------------------------- \n\/\/                 Conversion et calcul selon les param\u00e8tres re\u00e7us\n\/\/ ------------------------------------------------------------------------------- \n\nvoid do_Conversion_calcul(){\n\n      Serial.println(strDistParPas);  \n      Serial.println(strDelaiAvantDeclenchement);\n      Serial.println(strDelaiApresDeclenchement);\n      Serial.println(strDistanceEntreCaptureVR);\n      Serial.println(strNbreDePasEntreArrets);\n      Serial.println(strNbreDeBoucle);\n      Serial.println(strDistanceEntreCaptureVD);\n      Serial.println(strDeplacementTotal);\n      \n                      \n      if (strDistParPas !=\"\"){\n          fltDistParPas = strDistParPas.toFloat();\n      }\n      if (strDelaiAvantDeclenchement !=\"\"){\n         intDelaiAvantDeclenchement = strDelaiAvantDeclenchement.toInt();\n      }              \n      if (strDelaiApresDeclenchement !=\"\"){\n         intDelaiApresDeclenchement = strDelaiApresDeclenchement.toInt();\n      }          \n      if (strNbreDePasEntreArrets !=\"\"){\n         fltNbreDePasEntreArrets    = strNbreDePasEntreArrets.toFloat();\n      }         \n      if (strNbreDeBoucle !=\"\"){\n         intNbreDeBoucle = strNbreDeBoucle.toInt();\n         fltDistanceEntreCapture    = fltNbreDePasEntreArrets * fltDistParPas;\n         fltDeplacementTotal        = fltDistanceEntreCapture * intNbreDeBoucle;\n      }                    \n      if (strDistanceEntreCaptureVD !=\"\"){\n         fltDistanceEntreCapture    = strDistanceEntreCaptureVD.toFloat();\n      }            \n      if (strDeplacementTotal !=\"\"){\n         fltDeplacementTotal       = strDeplacementTotal.toFloat();\n         fltNbreDePasEntreArrets   = fltDistanceEntreCapture \/ fltDistParPas;\n         intNbreDePasEntreArrets   = fltNbreDePasEntreArrets;\n         intNbreDeBoucle           = fltDeplacementTotal \/ fltDistanceEntreCapture;\n      }          \n     \n      if (strDistanceEntreCaptureVR !=\"\"){\n         fltDistanceEntreCapture   = strDistanceEntreCaptureVR.toFloat();\n         fltNbreDePasEntreArrets   = fltDistanceEntreCapture \/ fltDistParPas;\n         intNbreDePasEntreArrets   = fltNbreDePasEntreArrets;\n         fltDeplacementTotal       = intCompteurdePasRef * fltDistParPas;\n         intNbreDeBoucle           = fltDeplacementTotal \/ fltDistanceEntreCapture;\n      }          \n      \n  }\n <\/pre>\n\n\n\n<br>\n\n\n\n<p><strong>do_Web_1_Colonne.h<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ ------------------------------------------------------------------------------- \n\/\/   serveur WEB    serveur WEB     serveur WEB      serveur WEB      serveur WEB \n\/\/ ------------------------------------------------------------------------------- \n\nvoid do_Web(){\n   WiFiClient client = server.available(); \/\/ \u00c9couter les clients entrants\n\n  if (client) {                            \/\/ si vous avez un client,\n    Serial.println(\"Nouveau Client!\");     \/\/ imprimer un message sur le port s\u00e9rie\n    int inChronoDebutConnexion= millis();   \n\n    while (client.connected()) {           \/\/ boucle alors que le client est connect\u00e9\n\n      if ((millis() - inChronoDebutConnexion) > 1000){ \/\/ D\u00e9connecte les fureteurs qui restent\n          client.stop();                                \/\/ connecter sans avoir d'\u00e9change \u00e0\n          inChronoDebutConnexion= millis();             \/\/ faire comme Chrome                           \n       }   \n       \n      if (client.available()) {           \/\/ s'il y a des octets \u00e0 lire du client,\n         char c = client.read();          \/\/ lire un octet, puis\n         \/\/Serial.write(c);               \/\/ Imprimez sur le moniteur s\u00e9rie\n         if (c == '\\n') {                 \/\/ si l'octet est un caract\u00e8re\n                                          \/\/ de nouvelle ligne\n\n           \/\/ si la ligne en cours est vide, vous avez\n           \/\/ deux caract\u00e8res de nouvelle ligne cons\u00e9cutifs.\n           \/\/ c'est la fin de la requ\u00eate HTTP du client,\n           \/\/ alors envoyez une r\u00e9ponse:\n           if (currentLine.length() == 0) {\n             client.println(\"HTTP\/1.1 200 OK\");\n             client.println(\"Content-Type: text\/html\\n\");\n\n\nclient.println(\"&lt;!DOCTYPE html>\");\nclient.println(\"&lt;html>\");\nclient.println(\"&lt;head>\");\nclient.println(\"&lt;meta http-equiv=\\\"content-type\\\" content=\\\"text\/html; charset=UTF-8\\\">\");\nclient.println(\"&lt;title>CTRL - Rail Macrophotographie&lt;\/title>\");\nclient.println(\"&lt;meta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1\\\">\");\nclient.println(\"&lt;link rel=\\\"icon\\\" href=\\\"data:,\\\">\");\n\nclient.println(\"&lt;style type=\\\"text\/css\\\">\");      \nclient.println(\"html {\");\nclient.println(\"font-family: Helvetica;\");\nclient.println(\"display: inline-block;\");\nclient.println(\"max-width: 500px;\");\nclient.println(\"margin: auto;\");\nclient.println(\"text-align: center;\");\nclient.println(\"}\");\nclient.println(\"h1{\");\nclient.println(\"color: #0F3376;\");\nclient.println(\"padding: 2vh;\");\nclient.println(\"}\");\nclient.println(\"h2{\");\nclient.println(\"color: #0F3376;\");\nclient.println(\"font-size: 1.0em;\");\nclient.println(\"margin-top: 0.67em;\");\nclient.println(\"margin-bottom: 0.67em;\");\nclient.println(\"margin-left: 0;\");\nclient.println(\"margin-right: 0;\");\nclient.println(\"font-weight: bold;\");\nclient.println(\"font-style: italic;\");\nclient.println(\"}\");\nclient.println(\"h3{\");\nclient.println(\"color: #ff0000;\");\nclient.println(\"font-size: 1.0em;\");\nclient.println(\"margin-top: 0.67em;\");\nclient.println(\"margin-bottom: 0.67em;\");\nclient.println(\"margin-left: 0;\");\nclient.println(\"margin-right: 0;\");\nclient.println(\"font-weight: bold;\");\nclient.println(\"font-style: italic;\");\nclient.println(\"}\");\nclient.println(\"p{\");\nclient.println(\"font-size: 1.5rem;\");\nclient.println(\"}\");\nclient.println(\".button {\");\nclient.println(\"display: inline-block;\");\nclient.println(\"background-color: #008CBA;\");\nclient.println(\"border: none;\");\nclient.println(\"border-radius: 4px;\");\nclient.println(\"color: white;\");\nclient.println(\"padding: 16px 40px;\");\nclient.println(\"text-decoration: none;\");\nclient.println(\"font-size: 30px;\");\nclient.println(\"margin: 2px;\");\nclient.println(\"cursor: pointer;\");\nclient.println(\"}\");\nclient.println(\".button2 {\");\nclient.println(\"background-color: #555555;\");\nclient.println(\"}\");\nclient.println(\"table.Type_A{\");\nclient.println(\"width: 1000px;\");\nclient.println(\"padding: 30px;\");\nclient.println(\"border: 0px solid red;\"); \nclient.println(\"background-color: #ffffff;\");  \nclient.println(\"}\");\n\nclient.println(\"table.Type_B{\");\nclient.println(\"width: 450px;\");\nclient.println(\"height: 200px;\");\nclient.println(\"border: 1px solid black;\"); \nclient.println(\"background-color: #888888;\");  \nclient.println(\"}\");\n\nclient.println(\"table.Type_C{\");\nclient.println(\"width: 450px;\");\nclient.println(\"height: 130px;\");\nclient.println(\"border: 1px solid black;\"); \nclient.println(\"background-color: #888888;\");  \nclient.println(\"}\");\n\nclient.println(\"table.Type_D{\");\nclient.println(\"width: 450px;\");\nclient.println(\"border: 1px solid black;\"); \nclient.println(\"background-color: #888888;\");  \nclient.println(\"}\");\n\nclient.println(\"&lt;\/style>\");\n\nclient.println(\"&lt;\/head>\");\nclient.println(\"&lt;body>\");\nclient.println(\"&lt;h2>- Contr\u00f4leur - Rail Macrophotographie -&lt;\/h2>\");\nif (bolSetParametreRepere){\nclient.println(\"&lt;h3>- Configurez PARAMETRES VERSUS REP\u00c8RES -&lt;\/h3>\");\n}\n\n\/\/-----------------------  CONTR\u00d4LE DE L'ACTION   -----------------------------------------------------------\/\/\n\n\n\/\/****D\u00c9PLACEMENT ****\nclient.println(\"&lt;table class=\\\"Type_B\\\">\");\n\nclient.println(\"&lt;tr>\");\nclient.println(\"&lt;td colspan=\\\"3\\\" bgcolor=\\\"#aaaaaa\\\">\");\nclient.println(\"&lt;h2>D\u00c9PLACEMENT&lt;\/h2>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td>AVANCE&lt;\/td>\");\nclient.println(\"&lt;td>STOP&lt;\/td>\");\nclient.println(\"&lt;td>RECULE&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/AvanceLente\\\">&lt;button class=\\\"button\\\">&lt;&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/STOP\\\">&lt;button class=\\\"button\\\">||&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/ReculeLente\\\">&lt;button class=\\\"button\\\">>&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/AvanceRapide\\\">&lt;button class=\\\"button\\\">&lt;&lt;&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/STOP\\\">&lt;button class=\\\"button\\\">||&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/ReculeRapide\\\">&lt;button class=\\\"button\\\">>>&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/AvanceTresRapide\\\">&lt;button class=\\\"button\\\">&lt;&lt;&lt;&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/STOP\\\">&lt;button class=\\\"button\\\">||&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/ReculeTresRapide\\\">&lt;button class=\\\"button\\\">>>>&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\n\nclient.println(\"&lt;\/table>\");\n\nclient.println(\"&lt;br>\");\nclient.println(\"&lt;table class=\\\"Type_C\\\">\");\n\nclient.println(\"&lt;tr>\");\nclient.println(\"&lt;td colspan=\\\"3\\\" bgcolor=\\\"#aaaaaa\\\">\");\nclient.println(\"&lt;h2>Suivi de capture&lt;\/h2>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"width: 450px;\\\" >&lt;h2>\");\nclient.println(String(compteur) + \"\/\" + String(intNbreDeBoucle));\nclient.println(\"&lt;\/h2>&lt;\/td>\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/Actualiser\\\">&lt;button class=\\\"button button2\\\">Actualiser&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\n\nclient.println(\"&lt;\/table>\");\n\nclient.println(\"&lt;br>\");\n\n\/\/****FIXE LES REP\u00c8RES ****\nclient.println(\"&lt;table class=\\\"Type_C\\\">\");\n\nclient.println(\"&lt;tr>\");\nclient.println(\"&lt;td colspan=\\\"3\\\" bgcolor=\\\"#aaaaaa\\\">\");\nclient.println(\"&lt;h2>FIXE LES REP\u00c8RES&lt;\/h2>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/RepereA\\\">&lt;button class=\\\"button\\\">A&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/RepereB\\\">&lt;button class=\\\"button\\\">B&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\n\nclient.println(\"&lt;\/table>\");\n\nclient.println(\"&lt;br>\");\n\n\n\n\/\/****CAPTURE ****\nclient.println(\"&lt;table class=\\\"Type_D\\\">\");\n\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/ACapture\\\">&lt;button class=\\\"button button2\\\">&lt;Capture&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/RCapture\\\">&lt;button class=\\\"button button2\\\">Capture>&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\n\nclient.println(\"&lt;\/table>\");\n\n\n\/\/****PHOTOCLIC ****\nclient.println(\"&lt;table class=\\\"Type_D\\\">\");\n\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/PhotoClic\\\">&lt;button class=\\\"button button2\\\">PhotoClic&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\n\nclient.println(\"&lt;\/table>\");\n\n\n\n\/\/-----------------------  AFFICHAGE -----------------------------------------------------------\/\/\nclient.println(\"&lt;br>&lt;br>\");\nclient.println(\"&lt;hr>\");\nclient.println(\"&lt;br>&lt;br>\");\n\n\n\n\/\/****PARAM\u00c8TRES G\u00c9N\u00c9RAUX ****\nclient.println(\"&lt;table class=\\\"Type_B\\\">\");\n\nclient.println(\"&lt;tr>\");\nclient.println(\"&lt;td colspan=\\\"3\\\" style=\\\"height: 20px;\\\" bgcolor=\\\"#aaaaaa\\\">&lt;h2>PARAM\u00c8TRES G\u00c9N\u00c9RAUX&lt;\/h2>&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; padding: 10px; width: 250px;\\\" >&lt;b>R\u00e9solution du rail&lt;\/b>&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"width: 100px;\\\">\"+String(fltDistParPas)+\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"text-align: left;\\\">\u00a0&lt;i>mm&lt;\/i>&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; padding: 10px;\\\" >&lt;b>D\u00e9lai avant d\u00e9clenchement&lt;\/b>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td>\"+String(intDelaiAvantDeclenchement)+\"&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"text-align: left; width: 110px;\\\">\u00a0&lt;i>milliseconde&lt;\/i>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; padding: 10px; width: 250px;\\\" >&lt;b>\u00a0D\u00e9lai apr\u00e8s d\u00e9clenchement&lt;\/b>&lt;\/td>\");\nclient.println(\"&lt;td>\"+String(intDelaiApresDeclenchement)+\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"text-align: left;\\\">\u00a0&lt;i>milliseconde&lt;\/i>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\n\nclient.println(\"&lt;\/table>\");\n\nclient.println(\"&lt;br>\");\n\n\/\/****PARAM\u00c8TRES VERSUS REP\u00c8RES ****\nclient.println(\"&lt;table class=\\\"Type_B\\\">\");\n\nclient.println(\"&lt;tr>\");\nclient.println(\"&lt;td colspan=\\\"3\\\" bgcolor=\\\"#aaaaaa\\\">\");\nclient.println(\"&lt;h2>PARAM\u00c8TRES VERSUS REP\u00c8RES&lt;\/h2>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; padding: 10px;\\\">&lt;b>Distance entre les captures&lt;\/b>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"width: 100px;\\\">\"+String(fltDistanceEntreCapture)+\"&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"text-align: left; width: 110px;\\\" >\u00a0&lt;i>mm&lt;\/i>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\n\nclient.println(\"&lt;\/table>\");\n\nclient.println(\"&lt;br>\");\n\n\n\/\/****PARAM\u00c8TRES VERSUS PAS ****\nclient.println(\"&lt;table class=\\\"Type_B\\\">\");\n\nclient.println(\"&lt;tr>\");\nclient.println(\"&lt;td colspan=\\\"3\\\" bgcolor=\\\"#aaaaaa\\\">\");\nclient.println(\"&lt;h2>PARAM\u00c8TRES VERSUS PAS&lt;\/h2>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; padding: 10px;\\\" >&lt;b>Nombre de pas entre les arr\u00eats&lt;\/b>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"width: 100px;\\\">\"+String(fltNbreDePasEntreArrets)+\"&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"width: 110px;\\\">-&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; padding: 10px;\\\" >&lt;b>Nombre de boucle&lt;\/b>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td>\"+String(intNbreDeBoucle)+\"&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td>-&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\n\nclient.println(\"&lt;\/table>\");\n\nclient.println(\"&lt;br>\");\n\n\/\/****PARAM\u00c8TRES VERSUS DISTANCE ****\nclient.println(\"&lt;table class=\\\"Type_B\\\">\");\n\nclient.println(\"&lt;tr>\");\nclient.println(\"&lt;td colspan=\\\"3\\\" bgcolor=\\\"#aaaaaa\\\">\");\nclient.println(\"&lt;h2>PARAM\u00c8TRES VERSUS DISTANCE&lt;\/h2>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; padding: 10px;\\\">&lt;b>Distance entre les captures&lt;\/b>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"width: 100px;\\\">\"+String(fltDistanceEntreCapture)+\"&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"text-align: left; width: 110px;\\\" >\u00a0&lt;i>mm&lt;\/i>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; padding: 10px;\\\">&lt;b>D\u00e9placement total&lt;\/b>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td>\"+String(fltDeplacementTotal)+\"&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"text-align: left;\\\">\u00a0&lt;i>mm&lt;\/i>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\n\nclient.println(\"&lt;\/table>\");\n\n\n\/\/--------------------  ENTR\u00c9E DES DONN\u00c9ES  -------------------------------------------------\/\/\nclient.println(\"&lt;br>&lt;br>\");\nclient.println(\"&lt;hr>\");\nclient.println(\"&lt;br>&lt;br>\");\nclient.println(\"&lt;form action=\\\"\/action_page.php\\\">\");\n\n\n\n\/\/****PARAM\u00c8TRES G\u00c9N\u00c9RAUX ****\nclient.println(\"&lt;table class=\\\"Type_B\\\">\");\n\nclient.println(\"&lt;tr>\");\nclient.println(\"&lt;td colspan=\\\"3\\\" style=\\\"height: 20px;\\\" bgcolor=\\\"#aaaaaa\\\">\");\nclient.println(\"&lt;h2>PARAM\u00c8TRES G\u00c9N\u00c9RAUX&lt;\/h2>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; width: 250px;\\\">&lt;b>R\u00e9solution du rail&lt;\/b>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"width: 100px;\\\">&lt;input name=\\\"ResolutionDuRail\\\" type=\\\"number\\\" step=\\\"0.01\\\">&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"text-align: left; width: 110px; padding: 10px;\\\">mm&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; padding: 10px;\\\">&lt;b>D\u00e9lai avant d\u00e9clenchement&lt;\/b>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td>&lt;input name=\\\"DelaiAvantDeclenchement\\\" type=\\\"number\\\">&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"text-align: left; padding: 10px;\\\">milliseconde&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; width: 250px;\\\">&lt;b>\u00a0 D\u00e9lai apr\u00e8s d\u00e9clenchement&lt;\/b>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"width: 100px;\\\">&lt;input name=\\\"DelaiApresDeclenchement\\\" type=\\\"number\\\">&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"text-align: left; padding: 10px;\\\">milliseconde&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\n\nclient.println(\"&lt;\/table>\");\n\nclient.println(\"&lt;br>\");\n\n\/\/****PARAM\u00c8TRES VERSUS REP\u00c8RES ****\nclient.println(\"&lt;table class=\\\"Type_B\\\">\");\n\nclient.println(\"&lt;tr>\");\nclient.println(\"&lt;td colspan=\\\"3\\\" bgcolor=\\\"#aaaaaa\\\">\");\nclient.println(\"&lt;h2>PARAM\u00c8TRES VERSUS REP\u00c8RES&lt;\/h2>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; padding: 10px;\\\">&lt;b>Distance entre les captures&lt;\/b>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td>&lt;input name=\\\"DistanceEntreCaptureVR\\\" type=\\\"number\\\" step=\\\"0.01\\\">&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"text-align: left; width: 110px;\\\" >\u00a0mm&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\n\nclient.println(\"&lt;\/table>\");\n\n\nclient.println(\"&lt;br>\");\nclient.println(\"&lt;input value=\\\"Soumettre\\\" type=\\\"submit\\\">&lt;br>\");\nclient.println(\"&lt;br>\");\n\n\n\n\/\/****PARAM\u00c8TRES VERSUS PAS ****\nclient.println(\"&lt;table class=\\\"Type_B\\\">\");\n\nclient.println(\"&lt;tr>\");\nclient.println(\"&lt;td colspan=\\\"3\\\" bgcolor=\\\"#aaaaaa\\\">\");\nclient.println(\"&lt;h2>PARAM\u00c8TRES VERSUS PAS&lt;\/h2>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; padding: 10px;\\\">&lt;b>Nombre de pas entre les arr\u00eats&lt;\/b>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td>&lt;input name=\\\"NbreDePasEntreArrets\\\" type=\\\"number\\\">&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"width: 110px;\\\">-&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; padding: 10px;\\\">&lt;b>Nombre de boucle&lt;\/b>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td>&lt;input name=\\\"NbreDeBoucle\\\" type=\\\"number\\\">&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td>-&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\n\nclient.println(\"&lt;\/table>\");\n\nclient.println(\"&lt;br>\");\n\n\/\/****PARAM\u00c8TRES VERSUS DISTANCE ****\nclient.println(\"&lt;table class=\\\"Type_B\\\">\");\n\nclient.println(\"&lt;tr>\");\nclient.println(\"&lt;td colspan=\\\"3\\\" bgcolor=\\\"#aaaaaa\\\">\");\nclient.println(\"&lt;h2>PARAM\u00c8TRES VERSUS DISTANCE&lt;\/h2>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; padding: 10px;\\\">&lt;b>Distance entre les captures&lt;\/b>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td>&lt;input name=\\\"DistanceEntreCaptureVD\\\" type=\\\"number\\\" step=\\\"0.01\\\">&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"text-align: left; width: 110px;\\\">\u00a0mm&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; padding: 10px;\\\">&lt;b>D\u00e9placement total&lt;\/b>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td>&lt;input name=\\\"DeplacementTotal\\\" type=\\\"number\\\" step=\\\"0.01\\\">&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"text-align: left;\\\">\u00a0mm&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\n\nclient.println(\"&lt;\/table>\");\n\nclient.println(\"&lt;br>\");\nclient.println(\"&lt;input value=\\\"Soumettre\\\" type=\\\"submit\\\">&lt;br>\");\nclient.println(\"&lt;br>\");\n\nclient.println(\"&lt;\/form>\");\n\nclient.println(\"&lt;\/body>\");\nclient.println(\"&lt;\/html>\");\n\n             break;  \/\/ break out of the while loop\n           }         \/\/ fin du if (currentLine.length() == 0) \n           else {    \/\/ currentLine.length() != 0 et c == '\\n' (nouvelle ligne)\n            \/\/ Une ligne de commandes est re\u00e7ue\n            do_Commandes();\n            currentLine = \"\";  \/\/ si vous avez un caract\u00e8re de nouvelle ligne, effacez currentLine:\n           }                   \/\/ fin du else { \/\/ currentLine.length() != 0\n         }                     \/\/ fin du if (c == '\\n')  \n  \n         else if (c != '\\r') \n         {  \/\/ si vous avez autre chose qu'un caract\u00e8re de retour de chariot,\n          currentLine += c;    \/\/ l'ajouter \u00e0 la fin de la currentLine\n         \/\/ Serial.println(currentLine);\n         }\n       }                       \/\/ # if (client.available())\n     }                         \/\/ # fin du while (client.connected())\n     client.stop();            \/\/ close the connection:\n     Serial.println(\"Client D\u00e9connect\u00e9\");\n  } \/\/ # fin du if (client) \n}\n <\/pre>\n\n\n\n<br>\n\n\n\n<p><strong>do_Web_2_Colonnes.h<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ ------------------------------------------------------------------------------- \n\/\/   serveur WEB    serveur WEB     serveur WEB      serveur WEB      serveur WEB \n\/\/ ------------------------------------------------------------------------------- \n\nvoid do_Web(){\n   WiFiClient client = server.available(); \/\/ \u00c9couter les clients entrants\n\n  if (client) {                            \/\/ si vous avez un client,\n    Serial.println(\"Nouveau Client!\");     \/\/ imprimer un message sur le port s\u00e9rie\n    int inChronoDebutConnexion= millis();   \n\n    while (client.connected()) {           \/\/ boucle alors que le client est connect\u00e9\n\n      if ((millis() - inChronoDebutConnexion) > 1000){  \/\/ D\u00e9connecte les fureteurs qui restent\n          client.stop();                                \/\/ connecter sans avoir d'\u00e9change \u00e0\n          inChronoDebutConnexion= millis();             \/\/ faire comme Chrome                           \n       }   \n       \n      if (client.available()) {           \/\/ s'il y a des octets \u00e0 lire du client,\n         char c = client.read();          \/\/ lire un octet, puis\n         \/\/Serial.write(c);               \/\/ Imprimez sur le moniteur s\u00e9rie\n         if (c == '\\n') {                 \/\/ si l'octet est un caract\u00e8re\n                                          \/\/ de nouvelle ligne\n\n           \/\/ si la ligne en cours est vide, vous avez\n           \/\/ deux caract\u00e8res de nouvelle ligne cons\u00e9cutifs.\n           \/\/ c'est la fin de la requ\u00eate HTTP du client,\n           \/\/ alors envoyez une r\u00e9ponse:\n           if (currentLine.length() == 0) {\n             client.println(\"HTTP\/1.1 200 OK\");\n             client.println(\"Content-Type: text\/html\\n\");\n\n\nclient.println(\"&lt;!DOCTYPE html>\");\nclient.println(\"&lt;html>\");\nclient.println(\"&lt;head>\");\nclient.println(\"&lt;meta http-equiv=\\\"content-type\\\" content=\\\"text\/html; charset=UTF-8\\\">\");\nclient.println(\"&lt;title>CTRL - Rail Macrophotographie&lt;\/title>\");\nclient.println(\"&lt;meta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1\\\">\");\nclient.println(\"&lt;link rel=\\\"icon\\\" href=\\\"data:,\\\">\");\n\nclient.println(\"&lt;style type=\\\"text\/css\\\">\");      \nclient.println(\"html {\");\nclient.println(\"font-family: Helvetica;\");\nclient.println(\"display: inline-block;\");\nclient.println(\"max-width: 1000px;\");\nclient.println(\"margin: auto;\");\nclient.println(\"text-align: center;\");\nclient.println(\"}\");\nclient.println(\"h1{\");\nclient.println(\"color: #0F3376;\");\nclient.println(\"padding: 2vh;\");\nclient.println(\"}\");\nclient.println(\"h2{\");\nclient.println(\"color: #0F3376;\");\nclient.println(\"font-size: 1.0em;\");\nclient.println(\"margin-top: 0.67em;\");\nclient.println(\"margin-bottom: 0.67em;\");\nclient.println(\"margin-left: 0;\");\nclient.println(\"margin-right: 0;\");\nclient.println(\"font-weight: bold;\");\nclient.println(\"font-style: italic;\");\nclient.println(\"}\");\nclient.println(\"h3{\");\nclient.println(\"color: #ff0000;\");\nclient.println(\"font-size: 1.0em;\");\nclient.println(\"margin-top: 0.67em;\");\nclient.println(\"margin-bottom: 0.67em;\");\nclient.println(\"margin-left: 0;\");\nclient.println(\"margin-right: 0;\");\nclient.println(\"font-weight: bold;\");\nclient.println(\"font-style: italic;\");\nclient.println(\"}\");\nclient.println(\"p{\");\nclient.println(\"font-size: 1.5rem;\");\nclient.println(\"}\");\nclient.println(\".button {\");\nclient.println(\"display: inline-block;\");\nclient.println(\"background-color: #008CBA;\");\nclient.println(\"border: none;\");\nclient.println(\"border-radius: 4px;\");\nclient.println(\"color: white;\");\nclient.println(\"padding: 16px 40px;\");\nclient.println(\"text-decoration: none;\");\nclient.println(\"font-size: 30px;\");\nclient.println(\"margin: 2px;\");\nclient.println(\"cursor: pointer;\");\nclient.println(\"}\");\nclient.println(\".button2 {\");\nclient.println(\"background-color: #555555;\");\nclient.println(\"}\");\nclient.println(\"table.Type_A{\");\nclient.println(\"width: 1000px;\");\nclient.println(\"padding: 30px;\");\nclient.println(\"border: 0px solid red;\"); \nclient.println(\"background-color: #ffffff;\");  \nclient.println(\"}\");\n\nclient.println(\"table.Type_B{\");\nclient.println(\"width: 450px;\");\nclient.println(\"height: 200px;\");\nclient.println(\"border: 1px solid black;\"); \nclient.println(\"background-color: #888888;\");  \nclient.println(\"}\");\n\nclient.println(\"table.Type_C{\");\nclient.println(\"width: 450px;\");\nclient.println(\"height: 130px;\");\nclient.println(\"border: 1px solid black;\"); \nclient.println(\"background-color: #888888;\");  \nclient.println(\"}\");\n\nclient.println(\"table.Type_D{\");\nclient.println(\"width: 450px;\");\nclient.println(\"border: 1px solid black;\"); \nclient.println(\"background-color: #888888;\");  \nclient.println(\"}\");\n\nclient.println(\"&lt;\/style>\");\n\nclient.println(\"&lt;\/head>\");\nclient.println(\"&lt;body>\");\nclient.println(\"&lt;h2>- Contr\u00f4leur - Rail Macrophotographie -&lt;\/h2>\");\nif (bolSetParametreRepere){\nclient.println(\"&lt;h3>- Configurez PARAMETRES VERSUS REP\u00c8RES -&lt;\/h3>\");\n}\n\n\/\/-----------------------  CONTR\u00d4LE DE L'ACTION   -----------------------------------------------------------\/\/\n\nclient.println(\"&lt;table class=\\\"Type_A\\\">\");\nclient.println(\"&lt;tr valign=\\\"center\\\">\");\nclient.println(\"&lt;td>\");\n\n\n\/\/****D\u00c9PLACEMENT ****\nclient.println(\"&lt;table class=\\\"Type_B\\\">\");\n\nclient.println(\"&lt;tr>\");\nclient.println(\"&lt;td colspan=\\\"3\\\" bgcolor=\\\"#aaaaaa\\\">\");\nclient.println(\"&lt;h2>D\u00c9PLACEMENT&lt;\/h2>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td>AVANCE&lt;\/td>\");\nclient.println(\"&lt;td>STOP&lt;\/td>\");\nclient.println(\"&lt;td>RECULE&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/AvanceLente\\\">&lt;button class=\\\"button\\\">&lt;&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/STOP\\\">&lt;button class=\\\"button\\\">||&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/ReculeLente\\\">&lt;button class=\\\"button\\\">>&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/AvanceRapide\\\">&lt;button class=\\\"button\\\">&lt;&lt;&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/STOP\\\">&lt;button class=\\\"button\\\">||&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/ReculeRapide\\\">&lt;button class=\\\"button\\\">>>&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/AvanceTresRapide\\\">&lt;button class=\\\"button\\\">&lt;&lt;&lt;&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/STOP\\\">&lt;button class=\\\"button\\\">||&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/ReculeTresRapide\\\">&lt;button class=\\\"button\\\">>>>&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\n\nclient.println(\"&lt;\/table>\");\n\n\n\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td>\");\n\n\/\/****FIXE LES REP\u00c8RES ****\nclient.println(\"&lt;table class=\\\"Type_C\\\">\");\n\nclient.println(\"&lt;tr>\");\nclient.println(\"&lt;td colspan=\\\"3\\\" bgcolor=\\\"#aaaaaa\\\">\");\nclient.println(\"&lt;h2>FIXE LES REP\u00c8RES&lt;\/h2>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/RepereA\\\">&lt;button class=\\\"button\\\">A&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/RepereB\\\">&lt;button class=\\\"button\\\">B&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\n\nclient.println(\"&lt;\/table>\");\n\nclient.println(\"&lt;br>&lt;br>\");\n\nclient.println(\"&lt;table class=\\\"Type_C\\\">\");\n\nclient.println(\"&lt;tr>\");\nclient.println(\"&lt;td colspan=\\\"3\\\" bgcolor=\\\"#aaaaaa\\\">\");\nclient.println(\"&lt;h2>Suivi de capture&lt;\/h2>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"width: 450px;\\\" >&lt;h2>\");\nclient.println(String(compteur) + \"\/\" + String(intNbreDeBoucle));\nclient.println(\"&lt;\/h2>&lt;\/td>\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/Actualiser\\\">&lt;button class=\\\"button button2\\\">Actualiser&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\n\nclient.println(\"&lt;\/table>\");\n\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;\/table>\");\n\nclient.println(\"&lt;br>\");\n\nclient.println(\"&lt;table class=\\\"Type_A\\\">\");\nclient.println(\"&lt;tr>\");\nclient.println(\"&lt;td>\");\n\n\n\/\/****CAPTURE ****\nclient.println(\"&lt;table class=\\\"Type_D\\\">\");\n\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/ACapture\\\">&lt;button class=\\\"button button2\\\">&lt;Capture&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/RCapture\\\">&lt;button class=\\\"button button2\\\">Capture>&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\n\nclient.println(\"&lt;\/table>\");\n\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td>\");\n\n\/\/****PHOTOCLIC ****\nclient.println(\"&lt;table class=\\\"Type_D\\\">\");\n\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td>&lt;a href=\\\"\/PhotoClic\\\">&lt;button class=\\\"button button2\\\">PhotoClic&lt;\/button>&lt;\/a>&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\n\nclient.println(\"&lt;\/table>\");\n\n\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;\/table>\");\n\n\n\/\/-----------------------  AFFICHAGE -----------------------------------------------------------\/\/\nclient.println(\"&lt;br>&lt;br>\");\nclient.println(\"&lt;hr>\");\nclient.println(\"&lt;br>&lt;br>\");\n\nclient.println(\"&lt;table class=\\\"Type_A\\\">\");\nclient.println(\"&lt;tr>\");\nclient.println(\"&lt;td>\");\n\n\n\/\/****PARAM\u00c8TRES G\u00c9N\u00c9RAUX ****\nclient.println(\"&lt;table class=\\\"Type_B\\\">\");\n\nclient.println(\"&lt;tr>\");\nclient.println(\"&lt;td colspan=\\\"3\\\" style=\\\"height: 20px;\\\" bgcolor=\\\"#aaaaaa\\\">&lt;h2>PARAM\u00c8TRES G\u00c9N\u00c9RAUX&lt;\/h2>&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; padding: 10px; width: 250px;\\\" >&lt;b>R\u00e9solution du rail&lt;\/b>&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"width: 100px;\\\">\"+String(fltDistParPas)+\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"text-align: left;\\\">\u00a0&lt;i>mm&lt;\/i>&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; padding: 10px;\\\" >&lt;b>D\u00e9lai avant d\u00e9clenchement&lt;\/b>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td>\"+String(intDelaiAvantDeclenchement)+\"&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"text-align: left; width: 110px;\\\">\u00a0&lt;i>milliseconde&lt;\/i>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; padding: 10px; width: 250px;\\\" >&lt;b>\u00a0D\u00e9lai apr\u00e8s d\u00e9clenchement&lt;\/b>&lt;\/td>\");\nclient.println(\"&lt;td>\"+String(intDelaiApresDeclenchement)+\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"text-align: left;\\\">\u00a0&lt;i>milliseconde&lt;\/i>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\n\nclient.println(\"&lt;\/table>\");\n\n\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td>\");\n\n\n\/\/****PARAM\u00c8TRES VERSUS REP\u00c8RES ****\nclient.println(\"&lt;table class=\\\"Type_B\\\">\");\n\nclient.println(\"&lt;tr>\");\nclient.println(\"&lt;td colspan=\\\"3\\\" bgcolor=\\\"#aaaaaa\\\">\");\nclient.println(\"&lt;h2>PARAM\u00c8TRES VERSUS REP\u00c8RES&lt;\/h2>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; padding: 10px;\\\">&lt;b>Distance entre les captures&lt;\/b>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"width: 100px;\\\">\"+String(fltDistanceEntreCapture)+\"&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"text-align: left; width: 110px;\\\" >\u00a0&lt;i>mm&lt;\/i>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\n\nclient.println(\"&lt;\/table>\");\n\n\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;\/table>\");\n\nclient.println(\"&lt;br>\");\n\nclient.println(\"&lt;table class=\\\"Type_A\\\">\");\nclient.println(\"&lt;tr>\");\nclient.println(\"&lt;td>\");\n\n\n\/\/****PARAM\u00c8TRES VERSUS PAS ****\nclient.println(\"&lt;table class=\\\"Type_B\\\">\");\n\nclient.println(\"&lt;tr>\");\nclient.println(\"&lt;td colspan=\\\"3\\\" bgcolor=\\\"#aaaaaa\\\">\");\nclient.println(\"&lt;h2>PARAM\u00c8TRES VERSUS PAS&lt;\/h2>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; padding: 10px;\\\" >&lt;b>Nombre de pas entre les arr\u00eats&lt;\/b>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"width: 100px;\\\">\"+String(fltNbreDePasEntreArrets)+\"&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"width: 110px;\\\">-&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; padding: 10px;\\\" >&lt;b>Nombre de boucle&lt;\/b>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td>\"+String(intNbreDeBoucle)+\"&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td>-&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\n\nclient.println(\"&lt;\/table>\");\n\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td>\");\n\n\/\/****PARAM\u00c8TRES VERSUS DISTANCE ****\nclient.println(\"&lt;table class=\\\"Type_B\\\">\");\n\nclient.println(\"&lt;tr>\");\nclient.println(\"&lt;td colspan=\\\"3\\\" bgcolor=\\\"#aaaaaa\\\">\");\nclient.println(\"&lt;h2>PARAM\u00c8TRES VERSUS DISTANCE&lt;\/h2>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; padding: 10px;\\\">&lt;b>Distance entre les captures&lt;\/b>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"width: 100px;\\\">\"+String(fltDistanceEntreCapture)+\"&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"text-align: left; width: 110px;\\\" >\u00a0&lt;i>mm&lt;\/i>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; padding: 10px;\\\">&lt;b>D\u00e9placement total&lt;\/b>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td>\"+String(fltDeplacementTotal)+\"&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"text-align: left;\\\">\u00a0&lt;i>mm&lt;\/i>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\n\nclient.println(\"&lt;\/table>\");\n\n\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;\/table>\");\n\n\n\/\/--------------------  ENTR\u00c9E DES DONN\u00c9ES  -------------------------------------------------\/\/\nclient.println(\"&lt;br>&lt;br>\");\nclient.println(\"&lt;hr>\");\nclient.println(\"&lt;br>&lt;br>\");\nclient.println(\"&lt;form action=\\\"\/action_page.php\\\">\");\n\nclient.println(\"&lt;table class=\\\"Type_A\\\">\");\nclient.println(\"&lt;tr>\");\nclient.println(\"&lt;td>\");\n\n\/\/****PARAM\u00c8TRES G\u00c9N\u00c9RAUX ****\nclient.println(\"&lt;table class=\\\"Type_B\\\">\");\n\nclient.println(\"&lt;tr>\");\nclient.println(\"&lt;td colspan=\\\"3\\\" style=\\\"height: 20px;\\\" bgcolor=\\\"#aaaaaa\\\">\");\nclient.println(\"&lt;h2>PARAM\u00c8TRES G\u00c9N\u00c9RAUX&lt;\/h2>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; width: 250px;\\\">&lt;b>R\u00e9solution du rail&lt;\/b>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"width: 100px;\\\">&lt;input name=\\\"ResolutionDuRail\\\" type=\\\"number\\\" step=\\\"0.01\\\">&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"text-align: left; width: 110px; padding: 10px;\\\">mm&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; padding: 10px;\\\">&lt;b>D\u00e9lai avant d\u00e9clenchement&lt;\/b>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td>&lt;input name=\\\"DelaiAvantDeclenchement\\\" type=\\\"number\\\">&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"text-align: left; padding: 10px;\\\">milliseconde&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; width: 250px;\\\">&lt;b>\u00a0 D\u00e9lai apr\u00e8s d\u00e9clenchement&lt;\/b>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"width: 100px;\\\">&lt;input name=\\\"DelaiApresDeclenchement\\\" type=\\\"number\\\">&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"text-align: left; padding: 10px;\\\">milliseconde&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\n\nclient.println(\"&lt;\/table>\");\n\n\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td>\");\n\n\n\/\/****PARAM\u00c8TRES VERSUS REP\u00c8RES ****\nclient.println(\"&lt;table class=\\\"Type_B\\\">\");\n\nclient.println(\"&lt;tr>\");\nclient.println(\"&lt;td colspan=\\\"3\\\" bgcolor=\\\"#aaaaaa\\\">\");\nclient.println(\"&lt;h2>PARAM\u00c8TRES VERSUS REP\u00c8RES&lt;\/h2>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; padding: 10px;\\\">&lt;b>Distance entre les captures&lt;\/b>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td>&lt;input name=\\\"DistanceEntreCaptureVR\\\" type=\\\"number\\\" step=\\\"0.01\\\">&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"text-align: left; width: 110px;\\\" >\u00a0mm&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\n\nclient.println(\"&lt;\/table>\");\n\n\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;\/table>\");\n\nclient.println(\"&lt;br>\");\nclient.println(\"&lt;input value=\\\"Soumettre\\\" type=\\\"submit\\\">&lt;br>\");\nclient.println(\"&lt;br>\");\n\n\nclient.println(\"&lt;table class=\\\"Type_A\\\">\");\nclient.println(\"&lt;tr>\");\nclient.println(\"&lt;td>\");\n\n\/\/****PARAM\u00c8TRES VERSUS PAS ****\nclient.println(\"&lt;table class=\\\"Type_B\\\">\");\n\nclient.println(\"&lt;tr>\");\nclient.println(\"&lt;td colspan=\\\"3\\\" bgcolor=\\\"#aaaaaa\\\">\");\nclient.println(\"&lt;h2>PARAM\u00c8TRES VERSUS PAS&lt;\/h2>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; padding: 10px;\\\">&lt;b>Nombre de pas entre les arr\u00eats&lt;\/b>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td>&lt;input name=\\\"NbreDePasEntreArrets\\\" type=\\\"number\\\">&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"width: 110px;\\\">-&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; padding: 10px;\\\">&lt;b>Nombre de boucle&lt;\/b>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td>&lt;input name=\\\"NbreDeBoucle\\\" type=\\\"number\\\">&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td>-&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\n\nclient.println(\"&lt;\/table>\");\n\n\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td>\");\n\n\n\/\/****PARAM\u00c8TRES VERSUS DISTANCE ****\nclient.println(\"&lt;table class=\\\"Type_B\\\">\");\n\nclient.println(\"&lt;tr>\");\nclient.println(\"&lt;td colspan=\\\"3\\\" bgcolor=\\\"#aaaaaa\\\">\");\nclient.println(\"&lt;h2>PARAM\u00c8TRES VERSUS DISTANCE&lt;\/h2>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; padding: 10px;\\\">&lt;b>Distance entre les captures&lt;\/b>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td>&lt;input name=\\\"DistanceEntreCaptureVD\\\" type=\\\"number\\\" step=\\\"0.01\\\">&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"text-align: left; width: 110px;\\\">\u00a0mm&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;tr bgcolor=\\\"#888888\\\">\");\nclient.println(\"&lt;td style=\\\"text-align: right; padding: 10px;\\\">&lt;b>D\u00e9placement total&lt;\/b>&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td>&lt;input name=\\\"DeplacementTotal\\\" type=\\\"number\\\" step=\\\"0.01\\\">&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;td style=\\\"text-align: left;\\\">\u00a0mm&lt;br>\");\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\n\nclient.println(\"&lt;\/table>\");\n\n\nclient.println(\"&lt;\/td>\");\nclient.println(\"&lt;\/tr>\");\nclient.println(\"&lt;\/table>\");\n\n\n\nclient.println(\"&lt;br>\");\nclient.println(\"&lt;input value=\\\"Soumettre\\\" type=\\\"submit\\\">&lt;br>\");\nclient.println(\"&lt;br>\");\n\nclient.println(\"&lt;\/form>\");\n\nclient.println(\"&lt;\/body>\");\nclient.println(\"&lt;\/html>\");\n\n             break;  \/\/ break out of the while loop\n           }         \/\/ fin du if (currentLine.length() == 0) \n           else {    \/\/ currentLine.length() != 0 et c == '\\n' (nouvelle ligne)\n            \/\/ Une ligne de commandes est re\u00e7ue\n            do_Commandes();\n            currentLine = \"\";  \/\/ si vous avez un caract\u00e8re de nouvelle ligne, effacez currentLine:\n           }                   \/\/ fin du else { \/\/ currentLine.length() != 0\n         }                     \/\/ fin du if (c == '\\n')  \n  \n         else if (c != '\\r') \n         {  \/\/ si vous avez autre chose qu'un caract\u00e8re de retour de chariot,\n          currentLine += c;    \/\/ l'ajouter \u00e0 la fin de la currentLine\n         \/\/ Serial.println(currentLine);\n         }\n       }                       \/\/ # if (client.available())\n     }                         \/\/ # fin du while (client.connected())\n     client.stop();            \/\/ close the connection:\n     Serial.println(\"Client D\u00e9connect\u00e9\");\n  } \/\/ # fin du if (client) \n}\n <\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Syst\u00e8me motoris\u00e9 pour la prise de photos en vue d&rsquo;un empilement en fonction de la mise au point (focus stacking). En macrophotographie, la zone de nettet\u00e9 couvre souvent qu&rsquo;une petite partie du sujet. Plusieurs clich\u00e9s sont requis pour couvrir le sujet au complet. Les photos captur\u00e9es sont combin\u00e9es pour obtenir une photo finale dont l&rsquo;ensemble [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"_links":{"self":[{"href":"https:\/\/espacerm.com\/webgen\/wp-json\/wp\/v2\/pages\/3144"}],"collection":[{"href":"https:\/\/espacerm.com\/webgen\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/espacerm.com\/webgen\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/espacerm.com\/webgen\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/espacerm.com\/webgen\/wp-json\/wp\/v2\/comments?post=3144"}],"version-history":[{"count":74,"href":"https:\/\/espacerm.com\/webgen\/wp-json\/wp\/v2\/pages\/3144\/revisions"}],"predecessor-version":[{"id":4345,"href":"https:\/\/espacerm.com\/webgen\/wp-json\/wp\/v2\/pages\/3144\/revisions\/4345"}],"wp:attachment":[{"href":"https:\/\/espacerm.com\/webgen\/wp-json\/wp\/v2\/media?parent=3144"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}