{"id":1141,"date":"2021-09-13T16:14:45","date_gmt":"2021-09-13T21:14:45","guid":{"rendered":"http:\/\/ve2cuy.com\/420-1c4\/?page_id=1141"},"modified":"2025-03-03T09:47:19","modified_gmt":"2025-03-03T14:47:19","slug":"arduino-analogread","status":"publish","type":"page","link":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/arduino-analogread\/","title":{"rendered":"Arduino &#8211; AnalogRead"},"content":{"rendered":"\n<h2 class=\"wp-block-heading has-text-align-left\">1 &#8211; Lecture d&rsquo;une valeur analogique, <span class=\"has-inline-color has-vivid-cyan-blue-color\">analogRead<\/span>()<\/h2>\n\n\n\n<p>L&rsquo;arduino Uno permet la lecture une valeur analogique \u00e0 partir des broches A0..A3.<\/p>\n\n\n\n<p>Ce type d&rsquo;entr\u00e9e permet de lire la position, par exemple, du potentiom\u00e8tre (contr\u00f4le de volume ou d&rsquo;intensit\u00e9) d&rsquo;un gradateur pour une lumi\u00e8re dans une pi\u00e8ce de la maison.<\/p>\n\n\n\n<p>Pour l&rsquo;exemple suivant, nous aurons besoin de connecter le module Grove &lsquo;Potentiom\u00e8tre&rsquo; au connecteur A0 du Hat Grove.<\/p>\n\n\n\n<p><strong><span class=\"has-inline-color has-vivid-red-color\">Note<\/span><\/strong>:  Les entr\u00e9es analogues de l&rsquo;ATMEGA 328P ont une r\u00e9solution de 10 bits.  C-a-d qu&rsquo;une valeur entre 0 et 1023 sera retourn\u00e9e lors de la lecture d&rsquo;un senseur analogique.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"525\" src=\"http:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2021\/09\/rotary-angle-sensor.jpg\" alt=\"\" class=\"wp-image-1147\" style=\"width:391px;height:293px\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2021\/09\/rotary-angle-sensor.jpg 700w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2021\/09\/rotary-angle-sensor-300x225.jpg 300w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\">1.1 &#8211; Exemple d&rsquo;une lecture du potentiom\u00e8tre <\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"16\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/* \n   --------------------------------------------------------------------------\n   Projet:         Introduction \u00e0 Arduino, la broche analogique.\n   Nom du fichier: digitalRead.uno\n   Auteur:         Alain Boudreault\n   Date:           2022.09.10\n   ---------------------------------------------------------------------------\n   Description:    Petit programme qui lit la valeur d'un module analogique\n                   (potentiom\u00e8tre) et affiche la valeur dans la console s\u00e9rie\n   ---------------------------------------------------------------------------\n   M-A-J:          2022.09.14 - Nom des contantes en caract\u00e8res majuscules.\n                   2025.03.03 - Ajout de Arduino.h + d\u00e9lai d'affichage\n   ---------------------------------------------------------------------------\n*\/\n#include &lt;Arduino.h>\n\n\/\/**********************************\n\/\/ Les constantes\n\/\/**********************************\nconst int BROCHE_DU_SENSEUR     = A0;    \/\/ La broche du potentiom\u00e8tre\nconst int BROCHE_DE_LA_DEL      = 3;     \/\/ La broche de la DEL.\nconst int VITESSE_UART          = 9600;  \/\/ Vitesse de la console s\u00e9rie\nconst int DELAI_AFFICHAGE       = 150;  \n\n\/\/**********************************\nvoid setup() {\n  pinMode(BROCHE_DE_LA_DEL, OUTPUT);\n  Serial.begin(VITESSE_UART );\n} \/\/ setup()\n\n\/\/**********************************\nvoid loop() {\n  int valeurDuPotentiometre = 0;     \n  \/\/ Lire et afficher la valeur du potentiom\u00e8tre\n  \/\/ NOTE: Les broches analogiques n'ont pas \u00e0 \u00eatre initialis\u00e9es.\n  valeurDuPotentiometre = analogRead(BROCHE_DU_SENSEUR);\n  Serial.print(\"Valeur du pot: \");\n  Serial.println(valeurDuPotentiometre);\n  \/\/ Ajout d'un d\u00e9lai pour ne pas saturer le moniteur s\u00e9rie\n  delay(DELAI_AFFICHAGE);\n} \/\/ loop()\n\n\/\/****** FIN DU FICHIER\n<\/pre>\n\n\n\n<p>1.2 &#8211; Tester l&rsquo;exemple<\/p>\n\n\n\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">ATTENTION <\/mark><\/strong>\u00e0 la position de l&rsquo;interrupteur de tension sur le Grove-Hat.   Assurez-vous qu&rsquo;il est \u00e0 la position 5 volts. L&rsquo;Atmega 328 utilise cette tension pour d\u00e9terminer la valeur limite d&rsquo;entr\u00e9e d&rsquo;une broche analogique.  \u00c0 la position 3.3 volts, la valeur maximum sera autour de 710.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">1.3 &#8211; <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">Laboratoire<\/mark><\/strong> &#8211; Clignoter une <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">DEL<\/mark><\/strong> en fn du <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">potentiom\u00e8tre<\/mark><\/strong>.<\/h2>\n\n\n\n<p>Il faut faire clignoter la <strong>DEL<\/strong> connect\u00e9e sur <strong>D3<\/strong> en utilisant la valeur du <strong>potentiom\u00e8tre<\/strong>.<\/p>\n\n\n\n<p>Par exemple, <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>si le potentiom\u00e8tre vaut 500 alors la DEL est <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\"><strong>ON<\/strong><\/mark> 500ms puis <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">OFF<\/mark><\/strong> 500ms,<\/li>\n\n\n\n<li>si le potentiom\u00e8tre vaut 150 alors la DEL est <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\"><strong>ON<\/strong><\/mark> 150ms puis <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">OFF<\/mark><\/strong> 150ms &#8230;<\/li>\n<\/ul>\n\n\n\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">ATTENTION<\/mark><\/strong>: La solution est affich\u00e9e \u00e0 la section suivante.  Si possible, r\u00e9sistez \u00e0 la tentation de la consulter avant d&rsquo;avoir tenter un essai ?.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>1.3S &#8211; <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">Solution du laboratoire<\/mark><\/strong> 1.3.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"18,22\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;Arduino.h>\n\n\/\/ Les constantes\nconst int BROCHE_DU_SENSEUR     = A0;    \/\/ La broche du potentiom\u00e8tre\nconst int BROCHE_DE_LA_DEL      = 3;     \/\/ La broche de la DEL.\nconst int VITESSE_UART          = 9600;\n\n\/\/**********************************\nvoid setup() {\n  pinMode(BROCHE_DE_LA_DEL, OUTPUT);\n  Serial.begin(VITESSE_UART );\n} \/\/ setup()\n\n\/\/**********************************\nvoid loop() {\n  int valeurDuPotentiometre = analogRead(BROCHE_DU_SENSEUR);\n\n  Serial.print(\"Valeur du pot: \");\n  Serial.println(valeurDuPotentiometre);\n  \n  \/\/ Allumer\/\u00e9teindre la DEL en utilisant la valeur du potentiom\u00e8tre\n  digitalWrite(BROCHE_DE_LA_DEL, HIGH);\n  delay(valeurDuPotentiometre);\n  digitalWrite(BROCHE_DE_LA_DEL, LOW);\n  delay(valeurDuPotentiometre);\n\n} \/\/ loop()\n\n\/\/****** FIN DU FICHIER<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2 &#8211; <span class=\"has-inline-color has-vivid-red-color\">Laboratoire<\/span> (dur\u00e9e 15 minutes)<\/h2>\n\n\n\n<p>Modifier le code source de l&rsquo;exemple pr\u00e9c\u00e9dent pour que la DEL clignote seulement si la valeur du potentiom\u00e8tre est comprise entre 200 et 800.  Sinon, la DEL doit demeurer \u00e9teinte.<\/p>\n\n\n\n<p>Il faut d\u00e9finir les valeurs limites avec des constantes (const int), C-a-d, il ne faut pas coder <strong>200 <\/strong>et <strong>800 <\/strong>\u00e0 la dure dans votre code.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">3 &#8211; \ud83d\udc49 <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">Laboratoire  <\/mark>(dur\u00e9e 30 minutes)<\/h2>\n\n\n\n<p>\u00c9crire un programme qui d\u00e9marre le clignotement d&rsquo;une <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">DEL<\/mark><\/strong> si le bouton poussoir est appuy\u00e9 une fois et qui arr\u00eate le clignotement de la <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">DEL<\/mark><\/strong> \u00e0 la prochaine utilisation du bouton poussoir.<\/p>\n\n\n\n<p>La vitesse de clignotement est renseign\u00e9e par la valeur du potentiom\u00e8tre.<\/p>\n\n\n\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">IMPORTANT<\/mark><\/strong>: Ne pas utiliser une solution bloquante pour le clignotement, ce qui aura comme effet de perdre des \u00e9v\u00e9nements du bouton. <\/p>\n\n\n\n<p>\ud83d\udc49 Il ne faut pas que la <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">DEL<\/mark><\/strong> reste allum\u00e9e si elle ne clignote pas.<\/p>\n\n\n\n<p>INDICE:  Voir <a href=\"http:\/\/ve2cuy.com\/420-1c4\/index.php\/arduino-serial-printlnval-et-digitalread\/#permutationbouton\" data-type=\"page\">permutation bouton<\/a> <\/p>\n\n\n\n<p><\/p>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<p><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">Voir la section 4.2<\/mark> &#8211; La fonction <code>map(value, fromLow, fromHigh, toLow, toHigh)<\/code><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">4 &#8211; Pulse with modulation (PWM), la fonction <span class=\"has-inline-color has-vivid-cyan-blue-color\">analogWrite<\/span>()<\/h2>\n\n\n\n<p>Il est possible de simuler un signal de sortie de type analogique pour par exemple varier l&rsquo;intensit\u00e9 d&rsquo;une DEL ou bien la vitesse d&rsquo;un moteur.<\/p>\n\n\n\n<p>Cette simulation est obtenue en variant la dur\u00e9e de l&rsquo;\u00e9tat allum\u00e9 et de l&rsquo;\u00e9tat \u00e9teint.<\/p>\n\n\n\n<p>Voici un graphe de d\u00e9monstration<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"438\" src=\"http:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2021\/09\/pwm.gif\" alt=\"\" class=\"wp-image-1152\"\/><\/figure>\n<\/div>\n\n\n<p>R\u00e9f\u00e9rence: <a href=\"https:\/\/www.arduino.cc\/en\/Tutorial\/Foundations\/PWM\">Arduino.cc<\/a><\/p>\n\n\n\n<p>La fonctionnalit\u00e9 PWM est obtenue gr\u00e2ce \u00e0 la fonction <span class=\"has-inline-color has-vivid-cyan-blue-color\"><strong>analogWrite(0..255)<\/strong><\/span>.<\/p>\n\n\n\n<p><strong><span class=\"has-inline-color has-vivid-red-color\">NOTE<\/span><\/strong>:  Sur <a href=\"https:\/\/www.arduino.cc\/reference\/fr\/language\/functions\/analog-io\/analogwrite\/\">Arduino Uno<\/a>, PWM est disponible seulement sur les broches <strong><span class=\"has-inline-color has-vivid-red-color\">3, 5, 6, 9, 10 et 11<\/span><\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<p>4.1 &#8211; Varier l&rsquo;intensit\u00e9 d&rsquo;une DEL gr\u00e2ce \u00e0 PWM. &#8211; version 01<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;Arduino.h>\n\n#define BROCHE_DEL      3         \/\/ LED sur pin 3\n#define DELAI           20\n#define UNE_SECONDE     1000\n\nvoid setup() {\n  pinMode(BROCHE_DEL, OUTPUT);    \/\/ Broche de la DEL en mode OUTPUT\n} \/\/ setup()\n\nvoid loop() {\n    static byte intensiteDEL = 255;\n\n    analogWrite(BROCHE_DEL, intensiteDEL ); \/\/ Allumer la DEL avec le mode PWM\n    intensiteDEL--;               \/\/ Diminuer la valeur d'intensit\u00e9 de la DEL\n\n    if ( intensiteDEL == 0) {     \/\/ Si intensit\u00e9 de la DEL est = 0 alors remettre \u00e0 255\n      intensiteDEL = 255;\n      delay(UNE_SECONDE \/ 2);     \/\/ Laisser la DEL \u00e9teinte pendant 1\/2 sec.\n    } \/\/ if ( intensiteDEL == 0)\n\n    delay(DELAI); \/\/ Ralentir un peu la variation d'intensit\u00e9 de la DEL.\n} \/\/ loop()<\/pre>\n\n\n\n<p>4.1 &#8211; Varier l&rsquo;intensit\u00e9 d&rsquo;une DEL gr\u00e2ce \u00e0 PWM. &#8211; version 02 (optimis\u00e9e) <\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">int ledPin        = 3;         \/\/ LED sur pin 3\nint intensiteDEL  = 255;\nint delai         = 20;\nvoid setup() {\n  pinMode(ledPin, OUTPUT);    \/\/ Broche de la DEL en mode OUTPUT\n}\n\nvoid loop() {\n    analogWrite(ledPin, --intensiteDEL );\n    if (!intensiteDEL) { \n      intensiteDEL = 255;\n      delay(500); \/\/ Laisser la DEL \u00e9teinte pendant 1\/2 sec.\n    }\n    delay(delai); \/\/ Ralentir un peu la variation d'intensit\u00e9 de la DEL.\n}<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">4.2 &#8211; La fonction map()<\/h3>\n\n\n\n<p>Il peut \u00eatre parfois utile de ramener une plage de valeurs, par exemple [0..1023] vers une autre plage de valeurs, par exemple [0.255].<\/p>\n\n\n\n<p>Si nous voulions contr\u00f4ler l&rsquo;intensit\u00e9 d&rsquo;une DEL, en utilisant PWM, par un potentiom\u00e8tre connect\u00e9 \u00e0 une source analogique, il faudrait concilier alors les deux plages de valeurs.<\/p>\n\n\n\n<p>La librairie de d\u00e9veloppement Arduino propose la fonction map() pour adresser cette situation.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4.3 &#8211; Syntaxe de la fonction map()<\/h3>\n\n\n\n<p><code>map(value, fromLow, fromHigh, toLow, toHigh)<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"_parameters\">Param\u00e8tres<\/h3>\n\n\n\n<p><code>value<\/code>: le nombre \u00e0 convertir<br><code>fromLow<\/code>: la valeur minimum de l&rsquo;\u00e9tendu \u00e0 convertir<br><code>fromHigh<\/code>: la valeur maximum de l&rsquo;\u00e9tendu \u00e0 convertir<br><code>toLow<\/code>: la valeur minimum de l&rsquo;\u00e9tendu d\u00e9sir\u00e9<br><code>toHigh<\/code>: la valeur maximum de l&rsquo;\u00e9tendu d\u00e9sir\u00e9<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">4.4.a &#8211; Exemple d&rsquo;utilisation de la fonction map() &#8211; version Serial.print<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"42,48\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/*\n    Fichier:  fn-map-println.ino\n    Auteur:   Alain Boudreault\n    Date:     2021.09.17\n    --------------------------------------------------------------------------\n    Description: Exemple d'une conversion des valeurs d'une entr\u00e9e digitale\n                 comprises entre 0..1023 vers une plage de valeurs\n                 comprises entre 0.255.\n\n                 Les valeurs converties sont affich\u00e9es dans le terminal s\u00e9rie\n                 en utilisant Serial.print()\n    --------------------------------------------------------------------------\n    M-A-J:       2025.03.03 - Ajout de Arduino.h\n    --------------------------------------------------------------------------    \n*\/\n\n#include &lt;Arduino.h>\n\n\/\/ D\u00e9finition des constantes\nconst int brocheDuSenseur  = A0;      \/\/ S\u00e9lection de la broche du potentiom\u00e8tre\nconst int vitesseUART      = 19200;  \/\/ Vitesse du port de communication s\u00e9rie\n\n\/\/ Les variables globales\nint valeurDuPotentiometre = 0;\n\n\/\/ ---------------------------------------\n\/\/ Initialisation des param\u00e8tres de d\u00e9part\n\/\/ ---------------------------------------\nvoid setup() {\n  Serial.begin(vitesseUART);\n  Serial.print(\"Programme: fn-map-print.ino\\n\");\n  Serial.print(\"Auteur:    Alain Boudreault\\n\");\n  Serial.print(\"----------------------------\\n\");\n  Serial.print(\"---- D\u00e9but du programme ----\\n\");\n  Serial.print(\"----------------------------\\n\\n\");\n} \/\/ setup()\n\n\/\/ -------------------------------------\n\/\/ Fonction principale de l'application\n\/\/ -------------------------------------\nvoid loop() {\n\n  \/\/ Boucler sur la prochaine ligne tant que la valeur du Pot n'aura pas chang\u00e9e de plus de 1\/1023. \n  while ( abs ( valeurDuPotentiometre - analogRead(brocheDuSenseur) ) &lt; 2 );\n  \/\/ abs(valeurDuPotentiometre);\n  \/\/ Lire et stocker la valeur du potentiom\u00e8tre\n  \/\/ NOTE: Les broches analogiques n'ont pas \u00e0 \u00eatre initialis\u00e9es.\n  valeurDuPotentiometre = analogRead(brocheDuSenseur);\n  \/\/ Convertir la plage des valeurs\n  int valeurConvertieDuPotentiometre = map(valeurDuPotentiometre, 0, 1023, 0, 255);\n  \n  \/\/ Afficher les r\u00e9sultats en utilisant Serial.print()\n  Serial.print(\"Valeur du pot avant conversion: \");\n  Serial.print(valeurDuPotentiometre);\n  Serial.print(\" apr\u00e8s conversion: \");\n  Serial.println(valeurConvertieDuPotentiometre);\n   \n  \/\/ Ajout d'un d\u00e9lai pour ne pas saturer le moniteur s\u00e9rie\n  delay(500);\n} \/\/ loop()\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading has-vivid-red-color has-text-color\">Couvrir la section suivante seulement apr\u00e8s avoir fait le module LCD<\/h3>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">4.4.b &#8211; Exemple d&rsquo;utilisation de la fonction map() &#8211; version IO Stream<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"18, 54, 55\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/*\n    Fichier:  fn-map-stream.ino\n    Auteur:   Alain Boudreault\n    Date:     2021.09.17\n    --------------------------------------------------------------------------\n    Description: Exemple d'une conversion des valeurs d'une entr\u00e9e digitale\n                 comprises entre 0..1023 vers une plage de valeurs\n                 comprises entre 0.255.\n\n                 Les valeurs converties sont affich\u00e9es dans le terminal s\u00e9rie\n                 en utilisant les Streams C++ (librairie de Mikal Hart)\n    --------------------------------------------------------------------------\n    M-A-J:       2025.03.03 - Ajout de Arduino.h\n    --------------------------------------------------------------------------    \n*\/\n\n#include &lt;Arduino.h>\n\/\/ https:\/\/github.com\/janelia-arduino\/Streaming\n#include &lt;Streaming.h>\n\n\/\/ D\u00e9finition des constantes\nconst int brocheDuSenseur  = A0;      \/\/ S\u00e9lection de la broche du potentiom\u00e8tre\nconst int vitesseUART      = 19200;  \/\/ Vitesse du port de communication s\u00e9rie\n\n\/\/ Les variables globales\nint valeurDuPotentiometre = 0;\n\n\/\/ ---------------------------------------\n\/\/ Initialisation des param\u00e8tres de d\u00e9part\n\/\/ ---------------------------------------\nvoid setup() {\n  Serial.begin(vitesseUART);\n  Serial &lt;&lt; \"Programme: fn-map-stream.ino\" &lt;&lt; endl;\n  Serial &lt;&lt; \"Auteur:    Alain Boudreault\"  &lt;&lt; endl;\n  Serial &lt;&lt; \"----------------------------\" &lt;&lt; endl;\n  Serial &lt;&lt; \"---- D\u00e9but du programme ----\" &lt;&lt; endl;\n  Serial &lt;&lt; \"----------------------------\" &lt;&lt; endl &lt;&lt; endl;\n} \/\/ setup()\n\n\/\/ -------------------------------------\n\/\/ Fonction principale de l'application\n\/\/ -------------------------------------\nvoid loop() {\n\n  \/\/ Boucler sur la prochaine ligne tant que la valeur du Pot n'aura pas chang\u00e9e de plus de 1\/1023. \n  while ( abs ( valeurDuPotentiometre - analogRead(brocheDuSenseur) ) &lt; 2 );\n  \/\/ abs(valeurDuPotentiometre);\n  \/\/ Lire et stocker la valeur du potentiom\u00e8tre\n  \/\/ NOTE: Les broches analogiques n'ont pas \u00e0 \u00eatre initialis\u00e9es.\n  valeurDuPotentiometre = analogRead(brocheDuSenseur);\n  \/\/ Convertir la plage des valeurs\n  int valeurConvertieDuPotentiometre = map(valeurDuPotentiometre, 0, 1023, 0, 255);\n  \n  \/\/ Afficher les r\u00e9sultats en utilisant les Streams C++\n  Serial &lt;&lt; \"Valeur du pot avant conversion: \" &lt;&lt; valeurDuPotentiometre\n  &lt;&lt; \" apr\u00e8s conversion: \" &lt;&lt; valeurConvertieDuPotentiometre &lt;&lt; endl;\n   \n  \/\/ Ajout d'un d\u00e9lai pour ne pas saturer le moniteur s\u00e9rie\n  delay(500);\n} \/\/ loop()\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4.4.c &#8211; Exemple d&rsquo;utilisation de la fonction map() &#8211; version sprintf()<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"23,52\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/*\n    Fichier:  fn-map-sprintf.ino\n    Auteur:   Alain Boudreault\n    Date:     2021.09.17\n    --------------------------------------------------------------------------\n    Description: Exemple d'une conversion des valeurs d'une entr\u00e9e digitale\n                 comprises entre 0..1023 vers une plage de valeurs\n                 comprises entre 0.255.\n\n                 Les valeurs converties sont affich\u00e9es dans le terminal s\u00e9rie\n                 en utilisant la fonction sprintf()\n    --------------------------------------------------------------------------\n    M-A-J:       2025.03.03 - Ajout de Arduino.h\n    --------------------------------------------------------------------------    \n*\/\n\n#include &lt;Arduino.h>\n\n\/\/ D\u00e9finition des constantes\nconst int brocheDuSenseur  = A0;      \/\/ S\u00e9lection de la broche du potentiom\u00e8tre\nconst int vitesseUART      = 19200;  \/\/ Vitesse du port de communication s\u00e9rie\n\n\/\/ Les variables globales\nint valeurDuPotentiometre = 0;\nchar chaine[80];\n\n\/\/ ---------------------------------------\n\/\/ Initialisation des param\u00e8tres de d\u00e9part\n\/\/ ---------------------------------------\nvoid setup() {\n  Serial.begin(vitesseUART);\n  Serial.print(\"Programme: fn-map-print.ino\\n\");\n  Serial.print(\"Auteur:    Alain Boudreault\\n\");\n  Serial.print(\"----------------------------\\n\");\n  Serial.print(\"---- D\u00e9but du programme ----\\n\");\n  Serial.print(\"----------------------------\\n\\n\");\n} \/\/ setup()\n\n\/\/ -------------------------------------\n\/\/ Fonction principale de l'application\n\/\/ -------------------------------------\nvoid loop() {\n\n  \/\/ Boucler sur la prochaine ligne tant que la valeur du Pot n'aura pas chang\u00e9e de plus de 1\/1023. \n  while ( abs ( valeurDuPotentiometre - analogRead(brocheDuSenseur) ) &lt; 2 );\n  \/\/ abs(valeurDuPotentiometre);\n  \/\/ Lire et stocker la valeur du potentiom\u00e8tre\n  \/\/ NOTE: Les broches analogiques n'ont pas \u00e0 \u00eatre initialis\u00e9es.\n  valeurDuPotentiometre = analogRead(brocheDuSenseur);\n  \/\/ Convertir la plage des valeurs\n  int valeurConvertieDuPotentiometre = map(valeurDuPotentiometre, 0, 1023, 0, 255);\n  \n  \/\/ Afficher les r\u00e9sultats en utilisant sprintf()\n  sprintf(chaine, \"Valeur du pot avant conversion: %d, apr\u00e8s conversion: %d\", valeurDuPotentiometre, valeurConvertieDuPotentiometre);\n  Serial.println(chaine);\n   \n  \/\/ Ajout d'un d\u00e9lai pour ne pas saturer le moniteur s\u00e9rie\n  delay(500);\n} \/\/ loop()\n<\/pre>\n\n\n\n<p>R\u00e9f\u00e9rence: <a href=\"http:\/\/www.cplusplus.com\/reference\/cstdio\/sprintf\/\">sprintf()<\/a>,  <a href=\"http:\/\/www.cplusplus.com\/reference\/cstdio\/printf\/\">format<\/a><\/p>\n\n\n\n<p><strong><span class=\"has-inline-color has-vivid-red-color\">NOTE<\/span><\/strong>: Pour des raisons de performance et d&rsquo;optimisation de la m\u00e9moire, la fonction <em>sprintf()<\/em> dans Arduino ne supporte pas les nombres r\u00e9els (float).  Une solution est disponible <a href=\"https:\/\/www.e-tinkers.com\/2020\/01\/do-you-know-arduino-sprintf-and-floating-point\/\">ici<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. &#8211; <span class=\"has-inline-color has-vivid-red-color\">Laboratoire<\/span> (dur\u00e9e 15 minutes)<\/h2>\n\n\n\n<p>\u00c9crire un programme qui permet de varier l&rsquo;intensit\u00e9 d&rsquo;une DEL connect\u00e9e sur D6 \u00e0 partir d&rsquo;un potentiom\u00e8tre connect\u00e9 sur A2.<\/p>\n\n\n\n<p>Note:  Il faut ramener les valeurs de Pot entre 0 et 255.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">5 &#8211; Varier l&rsquo;intensit\u00e9 d&rsquo;une DEL avec une boucle &lsquo;for&rsquo;<\/h2>\n\n\n\n<p><strong><span class=\"has-inline-color has-vivid-red-color\">Rappel<\/span><\/strong> &#8211; Instruction &lsquo;for&rsquo;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for (int variable; condition tant que vrai; modification de la variable) inst; ou {bloc}\n\nPar exemple:\n\n\/\/ Voici une boucle de 10 it\u00e9rations ( 0 \u00e0 9 )\nfor (int i=0; i &lt; 10; i++) {}  <\/code><\/pre>\n\n\n\n<p>5.1 &#8211; Voici un exemple complet d&rsquo;une boucle &lsquo;for&rsquo;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">void setup() {\n  Serial.begin(9600);\n  Serial.println(\"Debut du programme\\n\");\n\n  \/\/ Boucle 1\n  Serial.println(\"BOUCLE DE 0 A 9\");\n  for (int i = 0; i &lt; 10; i++) {\n    Serial.print(i);\n    Serial.println(\" - Yo!\");\n  }\n\n\n  \/\/ Boucle 2\n  Serial.println(\"\\n\\nBOUCLE DE 10 A 1\");\n  for (int i = 10; i > 0; i--) {\n    Serial.print(i);\n    Serial.println(\" - Yo!\");\n  }\n\n}\n\nvoid loop() {\n}\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<p>5.2 &#8211; Varier l&rsquo;intensit\u00e9 d&rsquo;une DEL en utilisant une boucle &lsquo;for&rsquo;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Varier l'intensit\u00e9 d'une DEL, connect\u00e9e sur D3, en utilisant une boucle 'for'\n#include &lt;Arduino.h>\n\nint ledPin = 3; \n\nvoid setup() {\n  \/\/ Rien \u00e0 faire ici\n  Serial.begin(9600);\n}\n\nvoid loop() {\n  \/\/ Allumer graduellement la DEL en pas de 5 \n  Serial.println(\"Allumer graduellement la DEL en pas de 5\");\n  for (int intensite = 0 ; intensite &lt; 255; intensite += 5) {\n    analogWrite(ledPin, intensite);\n    delay(30);\n  }\n\n  \/\/ \u00c9teindre graduellement la DEL en pas de 5 \n  Serial.println(\"\u00c9teindre graduellement la DEL en pas de 5\");\n  for (int intensite = 255 ; intensite >= 0; intensite -= 5) {\n    analogWrite(ledPin, intensite);\n    delay(30);\n  }\n\n  \/\/ delay(500); \/\/ Maintenir la DEL \u00e9teinte 0,5 sec.\n}<\/pre>\n\n\n\n<p>5.3 &#8211; Tester l&rsquo;application<\/p>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<p><a href=\"https:\/\/www.arduino.cc\/reference\/fr\/\">R\u00e9f\u00e9rence du langage Arduino<\/a>  <\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h6 class=\"wp-block-heading has-text-align-right\">Version 2025.03.03.1 du document<\/h6>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>1 &#8211; Lecture d&rsquo;une valeur analogique, analogRead() L&rsquo;arduino Uno permet la lecture une valeur analogique \u00e0 partir des broches A0..A3. Ce type d&rsquo;entr\u00e9e permet de lire la position, par exemple, du potentiom\u00e8tre (contr\u00f4le de volume ou d&rsquo;intensit\u00e9) d&rsquo;un gradateur pour une lumi\u00e8re dans une pi\u00e8ce de la maison. Pour l&rsquo;exemple suivant, nous aurons besoin de [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"ub_ctt_via":"","footnotes":""},"class_list":["post-1141","page","type-page","status-publish","hentry"],"featured_image_src":null,"_links":{"self":[{"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/pages\/1141","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/comments?post=1141"}],"version-history":[{"count":48,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/pages\/1141\/revisions"}],"predecessor-version":[{"id":3099,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/pages\/1141\/revisions\/3099"}],"wp:attachment":[{"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/media?parent=1141"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}