{"id":901,"date":"2021-07-27T18:16:12","date_gmt":"2021-07-27T23:16:12","guid":{"rendered":"http:\/\/ve2cuy.com\/420-1c4\/?page_id=901"},"modified":"2025-03-23T11:54:01","modified_gmt":"2025-03-23T16:54:01","slug":"copier-coller","status":"publish","type":"page","link":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/copier-coller\/","title":{"rendered":"Copier\/Coller et projets Wokwi"},"content":{"rendered":"\n<h3 class=\"wp-block-heading has-vivid-cyan-blue-color has-text-color\">A &#8211; Les copier\/coller<\/h3>\n\n\n\n<h3 class=\"wp-block-heading has-vivid-purple-color has-text-color\">B &#8211; Les projets sur Wokwi<\/h3>\n\n\n\n<h3 class=\"wp-block-heading has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-6f46c0fc467c4770f9828cdba3cba34f\">C &#8211; Erreurs et solutions<\/h3>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-vivid-cyan-blue-color has-text-color\">A- Les copier\/coller<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">A.1 &#8211; Arduino &#8211; Stub de d\u00e9part<\/h2>\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\/*\n  Commentaires d'ent\u00eate\n*\/\n\nvoid setup() {\n} \/\/ setup()\n\nvoid loop() {\n} \/\/ loop()\n\n\/\/ Sous Arduino IDE, la fonction main() est abstraite.\n\/\/ Son impl\u00e9mentation ressemble \u00e0 :\nvoid main() {\n  init();\n  setup();\n  for(;;){\n    loop();\n  }\n}\n\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">A.2 &#8211; Configuration d&rsquo;un &lsquo;snippet&rsquo; C++ dans VS-Code pour le &lsquo;stub&rsquo; Arduino de d\u00e9part: (fichier cpp.json) F1-&gt; snippet &#8230;<\/h2>\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=\"\">{\n\"Arduino code de d\u00e9part\" : {\n\t\t\"prefix\" : \"stub\",\n\t\t\"body\" : [\n\t\t\t\"\/*\",\n\t\t\t\"   Projet:  $TM_DIRECTORY\",\n\t\t\t\"   Fichier: $TM_FILENAME\",\n\t\t\t\"   Auteur:  \",\n\t\t\t\"   Date:    $CURRENT_YEAR-$CURRENT_MONTH-$CURRENT_DATE $CURRENT_HOUR:$CURRENT_MINUTE:$CURRENT_SECOND\",\n\t\t\t\"-----------------------------------------------\",\n\t\t\t\"   Description:\",\n\t\t\t\"\",\n\t\t\t\"-----------------------------------------------\",\n\t\t\t\"   M-A-J:\",\n\t\t\t\"*\/\",\n\t\t\t\"\",\n\t\t\t\"#include &lt;Arduino.h>\",\n\t\t\t\"#define VITESSE_UART 9600\",\n\t\t\t\"\",\n\t\t\t\"void setup() {\",\n\t\t\t\" Serial.begin(VITESSE_UART);\",\n\t\t\t\" Serial.println(F(\\\"D\u00e9but du programme ...\\\"));\",\n\t\t\t\"} \/\/ setup()\",\n\t\t\t\"\",\n\t\t\t\"void loop() {\",\n\t\t\t\"} \/\/ loop()\",\n\t\t\t\"\",\n\t\t\t\"\/\/ FIN DU FICHIER\"\n\t\t]\n\t},\n\"Arduino main.h\" : {\n\t\t\"prefix\" : \"main_h\",\n\t\t\"body\" : [\t\n\t\t\t\"#ifndef main_h\",\n\t\t\t\"#define main_h\",\n\t\t\t\"\",\n\t\t\t\"#endif\"\n\t\t]\n\t}\t\t\n}<\/pre>\n\n\n\n<p>R\u00e9f\u00e9rence: <a href=\"https:\/\/code.visualstudio.com\/docs\/editor\/userdefinedsnippets\">Snippets in Visual Studio Code<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">A.3 &#8211; Lier une librairie Install\u00e9e, \u00e0 un projet dans PatformIO:<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Naviguer vers PlatformIO-&gt;Libraries-&gt;Installed<\/li>\n\n\n\n<li>S\u00e9lectionner la librairie d\u00e9sir\u00e9e puis choisir l&rsquo;onglet: Installation<\/li>\n\n\n\n<li>Des indications seront affich\u00e9es pour la modification du fichier platformio.ini.  Par exemple;\n<ul class=\"wp-block-list\">\n<li>lib_deps = seeed-studio\/Grove &#8211; LCD RGB Backlight @ ^1.0.2<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">A.4 &#8211; Boite <\/h2>\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=\"\">\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502                                                                  \u2502      \n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524      \n\u2502                                                                  \u2502      \n\u2502                                                                  \u2502      \n\u2502                                                                  \u2502      \n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524      \n\u2502                                                                  \u2502      \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">A.5 &#8211; S\u00e9quence ANSI<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Couleur<\/th><th>Avant plan<\/th><th>Arri\u00e8re plan<\/th><\/tr><\/thead><tbody><tr><td>D\u00e9faut<\/td><td>Esc[0m<\/td><td>&nbsp;<\/td><\/tr><tr><td>Noir<\/td><td>Esc[30m<\/td><td>Esc[40m<\/td><\/tr><tr><td>Rouge<\/td><td>Esc[31m<\/td><td>Esc[41m<\/td><\/tr><tr><td>Vert<\/td><td>Esc[32m<\/td><td>Esc[42m<\/td><\/tr><tr><td>Jaune<\/td><td>Esc[33m<\/td><td>Esc[43m<\/td><\/tr><tr><td>Blue<\/td><td>Esc[34m<\/td><td>Esc[44m<\/td><\/tr><tr><td>Magenta<\/td><td>Esc[35m<\/td><td>Esc[45m<\/td><\/tr><tr><td>Cyan<\/td><td>Esc[36m<\/td><td>Esc[46m<\/td><\/tr><tr><td>Gris pale<\/td><td>Esc[37m<\/td><td>Esc[47m<\/td><\/tr><tr><td>Gris fonc\u00e9<\/td><td>Esc[90m<\/td><td>Esc[100m<\/td><\/tr><tr><td>Rouge clair<\/td><td>Esc[91m<\/td><td>Esc[101m<\/td><\/tr><tr><td>Vert clair<\/td><td>Esc[92m<\/td><td>Esc[102m<\/td><\/tr><tr><td>Jaune clair<\/td><td>Esc[93m<\/td><td>Esc[103m<\/td><\/tr><tr><td>Bleu clair<\/td><td>Esc[94m<\/td><td>Esc[104m<\/td><\/tr><tr><td>Magenta clair<\/td><td>Esc[95m<\/td><td>Esc[105m<\/td><\/tr><tr><td>Cyan clair<\/td><td>Esc[96m<\/td><td>Esc[106m<\/td><\/tr><tr><td>Blanc clair<\/td><td>Esc[97m<\/td><td>Esc[107m<\/td><\/tr><tr><td>Gras<\/td><td>Esc[1m<\/td><td>&nbsp;<\/td><\/tr><tr><td>Soulign\u00e9<\/td><td>Esc[4m<\/td><td>&nbsp;<\/td><\/tr><tr><td>Non soulign\u00e9<\/td><td>Esc[24m<\/td><td>&nbsp;<\/td><\/tr><tr><td>Texte invers\u00e9<\/td><td>Esc[7m<\/td><td>&nbsp;<\/td><\/tr><tr><td>Texte non invers\u00e9<\/td><td>Esc[27m<\/td><td>&nbsp;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Voici un exemple d&rsquo;utilisation:<\/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=\"\">\/\/ Note: Pour le monitor de PlatformIO, ajouter la directive \n\/\/ suivante dans le fichier ini.\n\/\/ Cela activera l'interpr\u00e9tation des s\u00e9quences ANSI\n\nmonitor_filters = direct \n\n\/\/ ---------------------------------------------------------------------------------------\n\/\/ Exemple sans librairie\n   Serial.print(\"\\033[91m\");  \/\/ S\u00e9quence ANSI pour afficher du texte en rouge.\n   Serial.println(\"Je suis du texte rouge clair\");\n   Serial.print(\"\\033[97m\");  \/\/ S\u00e9quence ANSI pour afficher du texte en blanc.\n   Serial.println(\"Je suis du texte blanc clair\");\n\n\/\/ Exemple avec la librairie ANSI de RobTillaart\n   ansi.foreground(ansi.white  + ansi.bright);\n   ansi.println(\"Je suis du texte blanc clair\");\n   ansi.foreground(ansi.red + ansi.bright);\n   ansi.println(\"Je suis du texte rouge clair\");\n\n\/\/ Exemple avec l'op\u00e9rateur ternaire\n   Serial &lt;&lt; (1 == 1 ? \"\\033[92m\" : \"\\033[93m\");\n   Serial &lt;&lt; \"couleur de 1 == 1\\n\";<\/pre>\n\n\n\n<p>Voici un exemple fonctionnel:<\/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#include \"ansi.h\"\n#include &lt;Streaming.h>\n\n#define ANSI_ROUGE          \"\\033[31m\"\n#define ANSI_VERT           \"\\033[32m\"\n#define ANSI_BLEU           \"\\033[34m\"\n#define ANSI_JAUNE          \"\\033[33m\"\n#define ANSI_BLANC          \"\\033[0m\"\n#define CURSEUR_ON          \"\\033[?25h\"\n#define CURSEUR_OFF         \"\\033[?25l\"\n\nANSI ansi(&amp;Serial);\n\nvoid setup() {\n  Serial.begin(9600);\n  ansi.clearScreen();\n  Serial &lt;&lt; CURSEUR_OFF &lt;&lt; ANSI_BLANC;\n  Serial &lt;&lt; (F(\"\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\\n\"));\n  Serial &lt;&lt; (F(\"\u2551      Exemple d'affiche avec s\u00e9quences ANSI.          \u2551\\n\"));\n  Serial &lt;&lt; (F(\"\u255f\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2562\\n\"));\n  Serial &lt;&lt; (F(\"\u2551                                                      \u2551\\n\"));\n  Serial &lt;&lt; (F(\"\u2551                                                      \u2551\\n\"));\n  Serial &lt;&lt; (F(\"\u2551 millis() =                                           \u2551\\n\"));\n  Serial &lt;&lt; (F(\"\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255d\\n\")); \n   ansi.gotoXY(3, 4);\n  Serial &lt;&lt; ANSI_ROUGE &lt;&lt; \"Je suis ROUGE\";\n  ansi.gotoXY(3, 5);\n  Serial &lt;&lt; ANSI_VERT &lt;&lt; \"Je suis VERT\";\n} \/\/ setup()\n\nvoid loop(){\n  ansi.gotoXY(14, 6);\n  Serial &lt;&lt; (millis() &lt; 10000 ? ANSI_BLEU : ANSI_JAUNE) &lt;&lt; millis();\n} \/\/ loop()<\/pre>\n\n\n\n<p>Ce qui va produire ceci:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"254\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/Capture-decran-le-2025-02-10-a-19.01.31-1024x254.png\" alt=\"\" class=\"wp-image-2769\" style=\"width:641px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/Capture-decran-le-2025-02-10-a-19.01.31-1024x254.png 1024w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/Capture-decran-le-2025-02-10-a-19.01.31-300x74.png 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/Capture-decran-le-2025-02-10-a-19.01.31-768x190.png 768w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/Capture-decran-le-2025-02-10-a-19.01.31.png 1130w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<p><a href=\"https:\/\/gist.github.com\/fnky\/458719343aabd01cfb17a3a4f7296797\">R\u00e9f\u00e9rence compl\u00e8te (en anglais)<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">A.6 &#8211; Fonction pour afficher une boite<\/h2>\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\/\/ ************************************************************\n   \/\/ D\u00e9finir la largeur et la hauteur de la bo\u00eete\n   int largeur = 50;  \/\/ Exemple de largeur\n   int hauteur = 18;  \/\/ Exemple de hauteur\n\n   \/\/ D\u00e9finir combien de lignes horizontales simples \u00e0 imprimer\n   int nbLignesHorizontales = 2;\n\n   \/\/ D\u00e9finir les num\u00e9ros des lignes o\u00f9 les lignes horizontales simples doivent \u00eatre imprim\u00e9es\n   int lignesHorizontales[] = {4, 14};\n\n   \/\/ Appeler la fonction pour afficher la bo\u00eete avec les lignes horizontales simples sp\u00e9cifi\u00e9es\n   afficherBoite(largeur, hauteur, nbLignesHorizontales, lignesHorizontales);\n} \/\/ setup()\n\n\/\/ ************************************************************\n\/\/ Fonction: afficherBoite()\n\/\/ Auteur: Alain Boudreault\n\nvoid afficherBoite(int largeur, \n                   int hauteur, \n                   int nbLignesHorizontales, \n                   int lignesHorizontales[]\n                  )\n\n\/\/ ************************************************************\n {\n  \/\/ Afficher la premi\u00e8re ligne (coin sup\u00e9rieur gauche, lignes horizontales doubles)\n  Serial.print(\"\u2554\");\n  for (int i = 0; i &lt; largeur - 2; i++) {\n      Serial.print(\"\u2550\");\n  }\n  Serial.println(\"\u2557\");\n\n  \/\/ Afficher les lignes interm\u00e9diaires (lignes verticales)\n  for (int i = 1; i &lt; hauteur - 1; i++) {\n      int ligneImprimee = 0;\n\n      \/\/ V\u00e9rifier si la ligne courante est une ligne \u00e0 afficher avec une ligne horizontale simple\n      for (int j = 0; j &lt; nbLignesHorizontales; j++) {\n          if (i == lignesHorizontales[j]) {\n              \/\/ Afficher une ligne horizontale simple avec jointure\n              Serial.print(\"\u255f\");\n              for (int k = 0; k &lt; largeur - 2; k++) {\n                  Serial.print(\"\u2500\");\n              }\n              Serial.println(\"\u2562\");\n              ligneImprimee = 1;\n              break;\n          }\n      }\n\n      if (!ligneImprimee) {\n          \/\/ Si aucune ligne horizontale simple n'a \u00e9t\u00e9 imprim\u00e9e, afficher une ligne verticale avec des espaces\n          Serial.print(\"\u2551\");\n          for (int j = 0; j &lt; largeur - 2; j++) {\n              Serial.print(\" \");\n          }\n          Serial.println(\"\u2551\");\n      }\n  }\n\n  \/\/ Afficher la derni\u00e8re ligne (coin inf\u00e9rieur gauche, lignes horizontales doubles)\n  if (hauteur > 1) {\n      Serial.print(\"\u255a\");\n      for (int i = 0; i &lt; largeur - 2; i++) {\n          Serial.print(\"\u2550\");\n      }\n      Serial.println(\"\u255d\");\n  }\n} \/\/ afficherBoite()<\/pre>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"403\" height=\"301\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/Capture-decran-le-2025-02-28-a-12.00.56.png\" alt=\"\" class=\"wp-image-3083\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/Capture-decran-le-2025-02-28-a-12.00.56.png 403w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/Capture-decran-le-2025-02-28-a-12.00.56-300x224.png 300w\" sizes=\"auto, (max-width: 403px) 100vw, 403px\" \/><\/figure>\n<\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">1 &#8211;   Afficher dans la console s\u00e9rie<\/h2>\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  \/\/ Note: Sous PlatformIO, la vitesse du terminal est de 9600 Baud.\n  \/\/ Il est possible de la changer, dans le fichier platformio.ini,  avec la propri\u00e9t\u00e9 monitor_speed = 115200. \n  Serial.begin(9600);\n  Serial.print(\"Bonjour le \");\n  Serial.println(\"monde!\");\n}<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">2 &#8211; Afficher un nombre en binaire et hexad\u00e9cimal:<\/h2>\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  unsigned int unNombre = 99;\n  Serial.begin(9600);\n  Serial.print(\"unNombre affich\u00e9 en binaire: \");\n  Serial.println(unNombre, BIN);\n  Serial.print(\"unNombre affich\u00e9 en hexad\u00e9cimal: \");\n  Serial.println(unNombre, HEX);\n}<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">3 &#8211; Augmenter la valeur d&rsquo;une variable de 5<\/h2>\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=\"\">uneVariable+=5;<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">4 &#8211; Diminuer la valeur d&rsquo;une variable de 47<\/h2>\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=\"\">uneVariable-=47;<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">5 &#8211; Renseigner une broche digitale en mode de sortie (OUTPUT) et y appliquer un signal &lsquo;ALLUMER&rsquo; (HIGH)<\/h2>\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=\"\">pinMode(noBroche, OUTPUT);\ndigitalWrite(noBroche, HIGH);  \/\/ Allume la DEL connect\u00e9e \u00e0 la broche noBroche<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">6 &#8211; Renseigner une broche digitale en mode d&rsquo;entr\u00e9e\/lecture (INPUT) et lire son \u00e9tat<\/h2>\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=\"\">pinMode(pinPushButton, INPUT);\netatPushButton = digitalRead(pinPushButton, HIGH);  \/\/ Placer l'\u00e9tat du pushButton dans etatPushButton<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">7 &#8211; Attendre que le pushButton soit rel\u00e2ch\u00e9 avant de continuer<\/h2>\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=\"\"> if (digitalRead(BROCHE_BOUTON))        \/\/ Si bouton appuy\u00e9 alors\n  {\n    \/\/ ... traitement ...\n    while(digitalRead(BROCHE_BOUTON));  \/\/ Attendre le rel\u00e2chement du bouton\n    delay(50);                          \/\/ \u00c9liminer le bruit du bouton.  \n  }     <\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">7.1 &#8211; Bouton, compteur et relai<\/h2>\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=\"\">\/*\n    Nos premiers pas avec un bouton interrupteur\n    Lorsqu'appuy\u00e9, le bouton vaut 1 sinon, il vaut 0.\n*\/\n\n#include &lt;Arduino.h>\n#include &lt;Streaming.h>\n#define LED             4\n#define BOUTON          3\n#define RELAI           2\n#define VITESSE_SERIAL  9600\n\nvoid setup() {\n    Serial.begin(VITESSE_SERIAL);\n    Serial &lt;&lt; F(\"D\u00e9but du programme ...\\n\");\n    pinMode(LED, OUTPUT);\n    pinMode(RELAI, OUTPUT);\n    pinMode(BOUTON, INPUT);\n    digitalWrite(LED,HIGH);\n} \/\/ setup()\n\nvoid loop() {\n    static unsigned long i = 0;\n    if (digitalRead(BOUTON)) {\n      Serial &lt;&lt; \"Bouton appuy\u00e9 \" &lt;&lt; ++i &lt;&lt; \" fois\" &lt;&lt; endl; \n      digitalWrite(RELAI, HIGH);\n      while(digitalRead(BOUTON)); \/\/ tant que BOUTON appuy\u00e9\n      delay(50);  \/\/ Debounce\n      digitalWrite(RELAI, LOW);\n    } \/\/ if\n} \/\/ loop()\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">8 &#8211; Utilisation de la m\u00e9moire: char[] vs String vs F()<\/h2>\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=\"\">\/*\n    Projet:  \n    Auteur: Alain Boudreault\n    Date:   2025.01.22\n    --------------------------------------------------------------\n    Description:\n\n    D\u00e9monstration de l'utilisation de la m\u00e9moire RAM\/Flash \n    entre une d\u00e9claration de type char[] et String\n    RAM : 218, Flash: 1546  -> char[]\n    RAM : 234, Flash: 2878  -> String\n\n    Utilisation de la Macro F() -> Chaine en Mem Flash\n    RAM : 188, Flash: 1560  -> char[]\n    --------------------------------------------------------------\n    Advanced Memory Usage is available via \n    \"PlatformIO Home > Project Inspect\"\n    RAM:   [=         ]   9.2% (used 188 bytes from 2048 bytes)\n    Flash: [          ]   4.8% (used 1560 bytes from 32256 bytes)\n*\/\n\n#include &lt;Arduino.h>\n#define MESSAGE \"abcdef\"\n\n#define TESTER_F\n\/\/#define STRING\n\n#ifndef TESTER_F\n  #ifdef STRING\n    String msg = MESSAGE;\n  #else\n    char msg[] = MESSAGE;\n  #endif\n#endif\n\nint i = 50;\n\nvoid setup() {\n   Serial.begin(115200);\n#ifndef TESTER_F\n   Serial.println(\"D\u00e9but du programme...\");\n   Serial.println(msg);\n#else   \n   Serial.println(F(\"D\u00e9but du programme...\"));\n   Serial.println(F(MESSAGE));\n#endif   \n}\n\nvoid loop() {\n}<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">8.1 &#8211; Tableau de chaines de caract\u00e8res<\/h2>\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=\"\">const char* messages[] = {  \"\u00c9teint\",                \/\/ 0\n                            \"Allum\u00e9\",                \/\/ 1\n                            \"Temp\u00e9rature \u00e9lev\u00e9e\",    \/\/ 2\n                            \"Message 04\",            \/\/ 3\n                            \"Message 05\",            \/\/ 4 \n                            \"Message 06\",            \/\/ 5\n                            \"Message 07\",            \/\/ 6\n                            \"Message 08\",            \/\/ 7\n                            \"Message 09\",            \/\/ 8\n                            \"Mouvement d\u00e9tect\u00e9!!\"    \/\/ 9\n                      };    <\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">8.2 &#8211; Fonction retournant une chaine de caract\u00e8res<\/h2>\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=\"\">const char * obtenirJourSemaine(int jourSemaine){\n  switch (jourSemaine){\n    case 0: return \"Dimanche\";\n    case 1: return \"Lundi\";\n    case 2: return \"Mardi\";\n    case 3: return \"Mercredi\";\n    case 4: return \"Jeudi\";\n    case 5: return \"Vendredi\";\n    case 6: return \"Samedi\";\n    default: return \"Erreur\";\n  }\n} \/\/ obtenirJourSemaine()<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">9 &#8211; Conversion d&rsquo;un &lsquo;float&rsquo; en chaine de caract\u00e8res<\/h2>\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=\"\">float fPI = PI;  \/\/ sous Arduino, float == double.\nchar\n    szStr[30],\n    szF[6]; \/\/ Pr\u00e9voir de la place pour le point, le signe (-) et le car de fin \\0.\n    \nvoid setup( void )\n{\n    Serial.begin(115200);\n    \/\/ dtostrf(float_value, min_largeur, nombres_apres_decimale, tableau_de_car)\n    dtostrf( fPI, 4, 2, szF );\n    sprintf( szStr, \"PI est \u00e9gal \u00e0 %s\", szF ); \/\/ Voir la fn snprintf()\n    Serial.println( szStr );\n    \n}\/\/setup<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">10.1 &#8211; Utilisation d&rsquo;une MACRO pour l&rsquo;affichage au terminal<\/h2>\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=\"\">#ifdef DEBUG\n#define AFFICHER(x) Serial.print(x)\n#else\n#define AFFICHER\n#endif\n\n\/\/ Utilisation:\nAFFICHER(\"Un message ...\\n\");<\/pre>\n\n\n\n<p>10.2 &#8211; Exemple d&rsquo;une MACRO avec un nombre variable de param\u00e8tres:<\/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=\"\">#define AFFICHER(...)  Serial.print(__VA_ARGS__)\n\n\/\/ Utilisation:\nAFFICHER(255, HEX);\nAFFICHER(\"Test\");<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">11 &#8211; Exemple de contenu du fichier platformio.ini<\/h2>\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=\"\">; PlatformIO Project Configuration File\n;\n;   Build options: build flags, source filter\n;   Upload options: custom upload port, speed and extra flags\n;   Library options: dependencies, extra library storages\n;   Advanced options: extra scripting\n;\n; Please visit documentation for the other options and examples\n; https:\/\/docs.platformio.org\/page\/projectconf.html\n\n[env:uno]\nplatform      = atmelavr\nboard         = uno\nframework     = arduino\nmonitor_speed = 115200\ndebug_tool    = avr-stub\n\nbuild_flags   =  -felide-constructors -std=c++0x\n\n;debug_port = SERIAL_PORT\n;debug_port = \/dev\/cu.usbmodem834201\n\n; platform_packages = \n;\ttoolchain-atmelavr@~3.70300.220127\n; GDB stub implementation\n;lib_deps =\n;    jdolinay\/avr-debugger @ ~1.5<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">12 &#8211; lcd_rgb &#8211; Variation de <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">RED<\/mark><\/strong><\/h2>\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=\"\">\/*\n  Projet:  C:\\Users\\alin_\\Documents\\PlatformIO\\Projects\\Projet02\\src\n  Fichier: main.cpp\n  Auteur:  \n  Date:    2025-01-28 17:06:27\n-----------------------------------------------\n  Description:\n\n-----------------------------------------------\n  M-A-J:\n*\/\n\n#include \"main.h\"\n\nrgb_lcd ecran;\n\nvoid setup() {\n  Serial.begin(VITESSE_UART);\n  Serial.println(F(\"D\u00e9but du programme ...\"));\n  ecran.begin(16,2);\n} \/\/ setup()\n\nvoid loop() {\n  ecran.clear();\n  ecran.print(\"Variation de RED\");\n  for (int i = 255; i > 0; i-=10)\n    { \n      ecran.setRGB(i,0,0);\n      ecran.setCursor(0,1);\n      ecran.print(\"i = \");\n      ecran.setCursor(4,1);\n      ecran.print(\"   \");\n      ecran.setCursor(4,1);\n      ecran.print(i);\n      AFFICHER(i);AFFICHER(\"\\n\");\n      delay(UN_COURT_MOMENT);\n    }\n} \/\/ loop()\n\n\/\/ FIN DU FICHIER<\/pre>\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=\"\">\/\/ main.h\n#ifndef main_h\n    #define main_h\n    #define DEBUG\n    #include &lt;Arduino.h>\n    #define VITESSE_UART 9600\n    #include \"rgb_lcd.h\"\n    #define UN_COURT_MOMENT  100\n\n    #ifdef DEBUG\n        #define AFFICHER(...)  Serial.print(__VA_ARGS__)\n    #else \n        #define AFFICHER\n    #endif\n#endif<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">13 &#8211; lcd_rgb : D\u00e9filement de caract\u00e8res:<\/h2>\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#include \"rgb_lcd.h\"\n\nrgb_lcd ecran;  \/\/ D\u00e9claration de l'objet de contr\u00f4le du LCD \n\nvoid uneFonctionAmusante();\nvoid setup() {\n  ecran.begin(16,2);\n  ecran.print(\"Coucou\");\n}\n\nvoid loop() {\n  static long unsigned int i = 1;\n  ecran.clear();\n  ecran.print(\"i = \");\n  ecran.print(i++);\n  delay(500);\n  uneFonctionAmusante();\n}\n\nvoid uneFonctionAmusante(){\n    \n    ecran.setCursor(0, 0);  \/\/ Curseur \u00e0 la position (0,0)\n\n    \/\/ Afficher 0 \u00e0 9:\n    for (int thisChar = 0; thisChar &lt; 10; thisChar++) {\n        ecran.print(thisChar);\n        delay(50);\n    } \/\/ for\n\n    ecran.setCursor(16, 1); \/\/ Curseur \u00e0 la position (16,1):\n    ecran.autoscroll();     \/\/ Activer le d\u00e9filement\n    \/\/ Afficher 0 \u00e0 9:\n    for (int thisChar = 0; thisChar &lt; 10; thisChar++) {\n        ecran.print(thisChar);\n        delay(50);\n    }\n    ecran.noAutoscroll();   \/\/ Desactiver le d\u00e9filement\n    ecran.clear();          \/\/ Effacer l'\u00e9cran:\n} \/\/ uneFonctionAmusante\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">14 &#8211; Des exemples de la directive #pragma<\/h2>\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=\"\">#pragma once \/\/ Directive de garde\n\n#pragma message \"Ce message va apparaitre \u00e0 la compilation!\"\n\n#pragma message \"Compilation du fichier \" __FILE__ \" ...\"\n\n\/\/\n#define DO_PRAGMA(x) _Pragma (#x)\n#define TODO(x) DO_PRAGMA(message (\"TODO - \" #x))\n...\nTODO(Penser \u00e0 corriger ceci...)\n\n\/\/ Traiter un fichier d'ent\u00eate comme un fichier syst\u00e8me:\n#ifndef MA_LIBRAIRIE_H\n#define MA_LIBRAIRIE_H\n#pragma GCC system_header\nvoid uneFonction();\n#endif\n\n\/\/ Ce qui va permettre d'utiliser la syntaxe suivant:\n#include &lt;ma_librairie.h>  \/\/ au lieu de \"ma_librairie.h\"\n\/\/ Note, sous GCC, les deux syntaxes sont interchangeables.\n\n<\/pre>\n\n\n\n<p>La directive <code>#pragma<\/code> est la m\u00e9thode sp\u00e9cifi\u00e9e par la norme C pour fournir des informations suppl\u00e9mentaires au compilateur, au-del\u00e0 de ce qui est exprim\u00e9 dans le langage lui-m\u00eame. Les formes de cette directive (couramment appel\u00e9es <em>pragmas<\/em>) sp\u00e9cifi\u00e9es par la norme C commencent par le pr\u00e9fixe <code>STDC<\/code> (macro qui vaut 1). Un compilateur C est libre d\u2019attribuer n&rsquo;importe quelle signification aux autres pragmas. La plupart des pragmas d\u00e9finis et support\u00e9s par GNU ont un pr\u00e9fixe <code>GCC<\/code>.<\/p>\n\n\n\n<p>C99 a introduit l&rsquo;op\u00e9rateur <code>_Pragma<\/code>. Cette fonctionnalit\u00e9 r\u00e9sout un probl\u00e8me majeur avec <code>#pragma<\/code> : \u00e9tant une directive, elle ne peut pas \u00eatre g\u00e9n\u00e9r\u00e9e par l&rsquo;expansion d&rsquo;une macro. <code>_Pragma<\/code> est un op\u00e9rateur, similaire \u00e0 <code>sizeof<\/code> ou <code>defined<\/code>, et peut \u00eatre int\u00e9gr\u00e9 dans une macro.<\/p>\n\n\n\n<p><a href=\"https:\/\/gcc.gnu.org\/onlinedocs\/cpp\/Pragmas.html\">R\u00e9f\u00e9rence<\/a> et <a href=\"https:\/\/gcc.gnu.org\/onlinedocs\/gcc-3.3.6\/cpp\/Standard-Predefined-Macros.html\">ici<\/a><\/p>\n\n\n\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">NOTE<\/mark><\/strong>: GNU ne recommande pas l&rsquo;utilisation de Pragma.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">15 &#8211; Utilisation de sizeof()<\/h2>\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=\"\">    char buffer[8];\n    Serial &lt;&lt; \"Size of char       : \" &lt;&lt; sizeof(char) &lt;&lt; \" octet(s)\" &lt;&lt; endl;\n    Serial &lt;&lt; \"Size of int        : \" &lt;&lt; sizeof(int) &lt;&lt; \" octet(s)\" &lt;&lt; endl;\n    Serial &lt;&lt; \"Size of long int   : \" &lt;&lt; sizeof(long int) &lt;&lt; \" octet(s)\" &lt;&lt; endl;\n    Serial &lt;&lt; \"Size of float      : \" &lt;&lt; sizeof(float) &lt;&lt; \" octet(s)\" &lt;&lt; endl;\n    Serial &lt;&lt; \"Size of double     : \" &lt;&lt; sizeof(double) &lt;&lt; \" octet(s)\" &lt;&lt; endl;\n    Serial &lt;&lt; \"Size of pointer    : \" &lt;&lt; sizeof(void *) &lt;&lt; \" octet(s)\" &lt;&lt; endl;\n    Serial &lt;&lt; \"Size of buffer[8]  : \" &lt;&lt; sizeof(buffer) &lt;&lt; \" octet(s)\" &lt;&lt; endl;\n\n\/\/ Ces instructions, roulant sur un Arduino Uno (MCU 8 bits), vont afficher :\n\nSize of char       : 1 octet(s)\nSize of int        : 2 octet(s)\nSize of long int   : 4 octet(s)\nSize of float      : 4 octet(s)\nSize of double     : 4 octet(s)\nSize of pointer    : 2 octet(s)\nSize of buffer[8]  : 8 octet(s)\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">16 &#8211; millis() -&gt; Jours-heures:minutes:sec.centieme<\/h2>\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#include &lt;rgb_lcd.h>\n\n#define SECONDES_PAR_JOUR    86400\n#define SECONDES_PAR_HEURE   3600\n#define SECONDES_PAR_MINUTE  60\n#define CENTIEME_PAR_SECONDE 100\n#define LCD_NB_COLONNE       16\n#define LCD_NB_LIGNE         2\n\nrgb_lcd ecran;\n\nvoid setup() {\n    ecran.begin(LCD_NB_COLONNE, LCD_NB_LIGNE);\n} \/\/ setup()\n\nvoid loop() {\n   char temps[17] = \"\"; \/\/ Longueur d'une ligne du LCD + un (0 pour fin de chaine)\n\n   unsigned long lesMillis  = millis();\n   unsigned long secondes   = lesMillis \/ 1000;\n   unsigned long sec100     = lesMillis \/ 10 ;\n\n   int jours    = secondes \/ SECONDES_PAR_JOUR;\n   secondes     %= SECONDES_PAR_JOUR;\n   byte heures  = secondes \/ SECONDES_PAR_HEURE;\n   secondes     %= SECONDES_PAR_HEURE;\n   byte minutes = secondes \/ SECONDES_PAR_MINUTE;\n   secondes     %= SECONDES_PAR_MINUTE;\n   sec100       %= CENTIEME_PAR_SECONDE; \n \n   snprintf(temps, sizeof(temps), \"%03dj %02d:%02d:%02lu.%02lu\", jours, heures, minutes, secondes, sec100);\n   ecran.setCursor(0,0);\n   ecran.print(temps);\n\n} \/\/ loop()<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">17 &#8211; Utilisation de pointeurs<\/h2>\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 a = 10, b = 20;\ncout &lt;&lt; \"Avant l'\u00e9change: a = \" &lt;&lt; a &lt;&lt; \", b = \" &lt;&lt; b &lt;&lt; endl;\nechagerValeurs(&amp;a, &amp;b);\ncout &lt;&lt; \"Apr\u00e8s l'\u00e9change: a = \" &lt;&lt; a &lt;&lt; \", b = \" &lt;&lt; b &lt;&lt; endl;\n\n\/\/ Exemple de fonction pour \u00e9changer les valeurs de deux variables en utilisant des pointeurs\nvoid echagerValeurs(int * ptrA, int * ptrB) {\n  int temp = *ptrA;\n  *ptrA = *ptrB;\n  *ptrB = temp;\n} \/\/ echangerValeurs<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">17.1 &#8211; Pointeurs et r\u00e9f\u00e9rences sur des &lsquo;string&rsquo;<\/h2>\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=\"\">\/\/ Exemple avec des pointeurs\nvoid echangerStrings(std::string * ptrA, std::string * ptrB) {\n  cout &lt;&lt; \"Adresse de ptrA \" &lt;&lt; ptrA &lt;&lt; \" et Adresse de ptrB \" &lt;&lt; ptrB &lt;&lt; endl;\n  std::string temp = *ptrA;\n  *ptrA = *ptrB;\n  *ptrB = temp;\n} \/\/ echangerStrings\n\n\/\/ Exemple avec des r\u00e9f\u00e9rences (surcharge de la fonction echangerString)\n\/\/ Les param\u00e8tres seront automatiquement 'caster' en pointeurs\nvoid echangerStrings(std::string &amp;ptrA, std::string &amp;ptrB) {\n  std::string temp = ptrA;\n  ptrA = ptrB;\n  ptrB = temp;\n} \/\/ echangerStrings\n\n\/\/ Exemples d'utilisation:\nstd::string strA = \"Bonjour\", strB = \"Salut\";\ncout &lt;&lt; \"Avant l'\u00e9change: strA = \" &lt;&lt; strA &lt;&lt; \", strB = \" &lt;&lt; strB &lt;&lt; endl;\nechangerStrings(&amp;strA, &amp;strB); \/\/ Utilise la premi\u00e8re d\u00e9finition de la fonction\ncout &lt;&lt; \"Apr\u00e8s l'\u00e9change: strA = \" &lt;&lt; strA &lt;&lt; \", strB = \" &lt;&lt; strB &lt;&lt; endl;\nechangerStrings(strA, strB);   \/\/ Utilise la deuxi\u00e8me d\u00e9finition de la fonction\ncout &lt;&lt; \"Apr\u00e8s l'\u00e9change: strA = \" &lt;&lt; strA &lt;&lt; \", strB = \" &lt;&lt; strB &lt;&lt; endl;<\/pre>\n\n\n\n<p>Ce qui va afficher:<\/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=\"\">Avant l'\u00e9change: strA = Bonjour, strB = Salut\nAdresse de ptrA 0x16b122a48 et Adresse de ptrB 0x16b122a30\nApr\u00e8s l'\u00e9change: strA = Salut, strB = Bonjour\nApr\u00e8s l'\u00e9change: strA = Bonjour, strB = Salut<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">20 &#8211; Transmetteur via UART ou broches digitales<\/h2>\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=\"\">\/*\n Code du transmetteur - sur le MEGA\n Note: Relier deux Arduino via le port D6\n*\/\n\n#include &lt;SoftwareSerial.h>\n#include \"rgb_lcd.h\"\n#include \"Streaming.h\"\n\n#define UART_RX             6\n#define UART_TX             7\n#define UART_VITESSE        9600\n#define MAX_NB_ALEATOIRE    99\n#define UNE_SECONDE         1000\n#define LCD_DEUXIEME_LIGNE  1\n#define LCD_NB_LIGNE        2\n#define LCD_NB_COL          16\n\n#define UART_MEGA\n#ifdef UART_MEGA\n   #define portSerieTransmetteur Serial3\n#else\n  SoftwareSerial portSerieTransmetteur(UART_RX, UART_TX); \/\/ RX, TX\n#endif\n\nrgb_lcd lcd;  \/\/ D\u00e9claration de l'objet de contr\u00f4le du LCD \n\nvoid setup() {\n  Serial.begin(UART_VITESSE); \/\/ port natif utilis\u00e9 pour le d\u00e9bogage\n  Serial.println(\"D\u00e9marrage du transmetteur...\");\n  lcd.begin(LCD_NB_COL,LCD_NB_LIGNE);\n  lcd.print(\"Transmetteur\");\n  \/\/ Initialiser le port serie 'SoftwareSerial'\n  portSerieTransmetteur.begin(UART_VITESSE);\n} \/\/ setup()\n\nvoid loop() {\n   \/\/ Transmettre un code \u00e0 chaque seconde  \n   \/\/ g\u00e9n\u00e9rer un nombre entre 0 et MAX_NB_ALEATOIRE - 1\n   byte unCode = random(MAX_NB_ALEATOIRE); \n   portSerieTransmetteur.write(unCode);\n   Serial &lt;&lt; \"Envoi du code suivant: \" &lt;&lt; unCode &lt;&lt; endl;\n   lcd.setCursor(0, LCD_DEUXIEME_LIGNE);\n   lcd &lt;&lt; \"Envoi de: \" &lt;&lt; unCode;\n   delay(UNE_SECONDE);\n} \/\/ loop()<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-vivid-purple-color has-text-color\">B &#8211; Les projets sur Wokwi<\/h2>\n\n\n\n<p>1 &#8211; <a href=\"https:\/\/wokwi.com\/projects\/340719193452184147\">Serial.println()<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/wokwi.com\/projects\/340719193452184147\"><img loading=\"lazy\" decoding=\"async\" width=\"706\" height=\"277\" src=\"http:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-12-a-17.41.48.png\" alt=\"\" class=\"wp-image-1979\" style=\"width:762px;height:299px\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-12-a-17.41.48.png 706w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-12-a-17.41.48-300x118.png 300w\" sizes=\"auto, (max-width: 706px) 100vw, 706px\" \/><\/a><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>2 &#8211; <a href=\"https:\/\/wokwi.com\/projects\/342633299140674132\">Clignoter une DEL (broche 13)<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wokwi.com\/projects\/342633299140674132\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"461\" src=\"http:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-12-a-17.50.50-1024x461.png\" alt=\"\" class=\"wp-image-1981\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-12-a-17.50.50-1024x461.png 1024w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-12-a-17.50.50-300x135.png 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-12-a-17.50.50-768x346.png 768w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-12-a-17.50.50.png 1059w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>3 &#8211; <a href=\"https:\/\/wokwi.com\/projects\/341435633034592850\">Clignoter trois DELs &#8211; Lumi\u00e8res de circulation<\/a><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><a href=\"https:\/\/wokwi.com\/projects\/341435633034592850\"><img loading=\"lazy\" decoding=\"async\" width=\"762\" height=\"681\" src=\"http:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-12-a-17.57.21.png\" alt=\"\" class=\"wp-image-1985\" style=\"width:557px;height:498px\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-12-a-17.57.21.png 762w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-12-a-17.57.21-300x268.png 300w\" sizes=\"auto, (max-width: 762px) 100vw, 762px\" \/><\/a><\/figure>\n<\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>4 &#8211; <a href=\"https:\/\/wokwi.com\/projects\/340722670823801427\">Conversion de base (10,2,8,16) sur un \u00e9cran LCD<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wokwi.com\/projects\/340722670823801427\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"735\" src=\"http:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-12-a-18.11.44-1024x735.png\" alt=\"\" class=\"wp-image-1990\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-12-a-18.11.44-1024x735.png 1024w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-12-a-18.11.44-300x215.png 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-12-a-18.11.44-768x551.png 768w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-12-a-18.11.44.png 1322w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>5 &#8211; <a href=\"https:\/\/wokwi.com\/projects\/341337322410738258\">Lecture de l&rsquo;\u00e9tat d&rsquo;un pushButton<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wokwi.com\/projects\/341337322410738258\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"526\" src=\"http:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-12-a-18.21.31-1024x526.png\" alt=\"\" class=\"wp-image-1993\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-12-a-18.21.31-1024x526.png 1024w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-12-a-18.21.31-300x154.png 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-12-a-18.21.31-768x394.png 768w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-12-a-18.21.31.png 1044w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>6 &#8211; <a href=\"https:\/\/wokwi.com\/projects\/342965838174749267\">Attendre qu&rsquo;un pushButton soit rel\u00e2ch\u00e9 avant que le programme reprenne<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wokwi.com\/projects\/342965838174749267\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"581\" src=\"http:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-12-a-18.39.33-1024x581.png\" alt=\"\" class=\"wp-image-1996\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-12-a-18.39.33-1024x581.png 1024w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-12-a-18.39.33-300x170.png 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-12-a-18.39.33-768x436.png 768w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-12-a-18.39.33.png 1214w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><a href=\"https:\/\/wokwi.com\/projects\/343893684389937748\">7 &#8211; Solution DOC11.3.5 &#8211; Afficher valeur POT sur LCD<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/wokwi.com\/projects\/343893684389937748\"><img loading=\"lazy\" decoding=\"async\" width=\"649\" height=\"773\" src=\"http:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-26-a-16.11.25.png\" alt=\"\" class=\"wp-image-2061\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-26-a-16.11.25.png 649w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-26-a-16.11.25-252x300.png 252w\" sizes=\"auto, (max-width: 649px) 100vw, 649px\" \/><\/a><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><a href=\"https:\/\/wokwi.com\/projects\/343892046296121940\">8 &#8211; Solution DOC11.3.6 &#8211; LCD + Temps qui passe + compteur bouton<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/wokwi.com\/projects\/343892046296121940\"><img loading=\"lazy\" decoding=\"async\" width=\"651\" height=\"771\" src=\"http:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-26-a-16.19.12.png\" alt=\"\" class=\"wp-image-2066\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-26-a-16.19.12.png 651w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2022\/09\/Capture-decran-le-2022-09-26-a-16.19.12-253x300.png 253w\" sizes=\"auto, (max-width: 651px) 100vw, 651px\" \/><\/a><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">C &#8211; Erreurs et solutions<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">C.1 &#8211; Erreur avec les librairies sous PlatformIO<\/h3>\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=\"\">Dans une de ces situations:\n\nLink Error:\nResolving Uno dependencies\u2026\nRemoving unused dependencies\u2026\n\n1 - SemanticVersionError: Invalid simple spec: \u2018^0.0.0-alpha+sha.39f236ea18\u2019\n2 - SemanticVersionError: Invalid simple block \u2018^2.0.6;\u2019<\/pre>\n\n\n\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">Solution<\/mark><\/strong>: Effacer le contenu du fichier .pio\/libdeps\/integrity.dat<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"841\" height=\"259\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/erreur-libs.png\" alt=\"\" class=\"wp-image-2927\" style=\"width:639px;height:auto\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/erreur-libs.png 841w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/erreur-libs-300x92.png 300w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/02\/erreur-libs-768x237.png 768w\" sizes=\"auto, (max-width: 841px) 100vw, 841px\" \/><\/figure>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>A &#8211; Les copier\/coller B &#8211; Les projets sur Wokwi C &#8211; Erreurs et solutions A- Les copier\/coller A.1 &#8211; Arduino &#8211; Stub de d\u00e9part A.2 &#8211; Configuration d&rsquo;un &lsquo;snippet&rsquo; C++ dans VS-Code pour le &lsquo;stub&rsquo; Arduino de d\u00e9part: (fichier cpp.json) F1-&gt; snippet &#8230; R\u00e9f\u00e9rence: Snippets in Visual Studio Code A.3 &#8211; Lier une librairie [&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-901","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\/901","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=901"}],"version-history":[{"count":78,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/pages\/901\/revisions"}],"predecessor-version":[{"id":3360,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/pages\/901\/revisions\/3360"}],"wp:attachment":[{"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/media?parent=901"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}