{"version":"1.1","schema_version":"1.1.0","plugin_version":"1.1.2","url":"https://tutos-gameserver.fr/2019/10/12/arduino-web-server-et-controle-des-voyants-de-la-page-web-a-laide-du-bouton-html-et-du-bouton-poussoir-physique-serveur-dimpression/","llm_html_url":"https://tutos-gameserver.fr/2019/10/12/arduino-web-server-et-controle-des-voyants-de-la-page-web-a-laide-du-bouton-html-et-du-bouton-poussoir-physique-serveur-dimpression/llm","llm_json_url":"https://tutos-gameserver.fr/2019/10/12/arduino-web-server-et-controle-des-voyants-de-la-page-web-a-laide-du-bouton-html-et-du-bouton-poussoir-physique-serveur-dimpression/llm.json","manifest_url":"https://tutos-gameserver.fr/llm-endpoints-manifest.json","language":"fr-FR","locale":"fr_FR","title":"Arduino Web Server et contrôle des voyants de la page Web à l&#39;aide du bouton HTML et du bouton-poussoir physique\n &#8211; Serveur d&rsquo;impression","site":{"name":"Tutos GameServer","url":"https://tutos-gameserver.fr/"},"author":{"id":1,"name":"Titanfall","url":"https://tutos-gameserver.fr/author/titanfall/"},"published_at":"2019-10-12T17:28:22+00:00","modified_at":"2019-10-12T17:28:22+00:00","word_count":2614,"reading_time_seconds":785,"summary":"Créé le: 13 avril 2015 Ce projet de carte de visite Arduino utilise un blindage Arduino Uno et Arduino Ethernet avec une carte SD en tant que serveur Web. Deux boutons poussoirs et deux DEL sont connectés à l’Arduino. La page Web hébergée par le serveur Web Arduino permet à une LED d&#39;être contrôlée par [&hellip;]","summary_points":["Créé le: 13 avril 2015\nCe projet de carte de visite Arduino utilise un blindage Arduino Uno et Arduino Ethernet avec une carte SD en tant que serveur Web.","Deux boutons poussoirs et deux DEL sont connectés à l’Arduino.","La page Web hébergée par le serveur Web Arduino permet à une LED d&#39;être contrôlée par une case à cocher et à l&#39;autre par un bouton HTML sur la page Web.","Les deux mêmes DEL sont également contrôlées par deux boutons-poussoirs."],"topics":["Serveur d'impression"],"entities":[],"entities_metadata":[{"id":10,"name":"Serveur d'impression","slug":"serveur-dimpression","taxonomy":"category","count":3907,"url":"https://tutos-gameserver.fr/category/serveur-dimpression/"}],"tags":["Serveur d'impression"],"content_hash":"9c1196af7177429f74f50fa18da24bce","plain_text":"Créé le: 13 avril 2015\nCe projet de carte de visite Arduino utilise un blindage Arduino Uno et Arduino Ethernet avec une carte SD en tant que serveur Web. Deux boutons poussoirs et deux DEL sont connectés à l’Arduino.\nLa page Web hébergée par le serveur Web Arduino permet à une LED d&#39;être contrôlée par une case à cocher et à l&#39;autre par un bouton HTML sur la page Web.\nLes deux mêmes DEL sont également contrôlées par deux boutons-poussoirs. Lorsqu&#39;une LED est allumée ou éteinte à partir de la page Web, son état est visible dans la case à cocher ou dans le texte du bouton.\nLa case à cocher et le texte du bouton sont également mis à jour si vous appuyez sur les boutons physiques pour allumer ou éteindre les voyants. Ajax est utilisé sur la page Web afin que les mises à jour de cette page soient exemptes de tout scintillement.\nLa vidéo ci-dessous montre le circuit exploité à partir du navigateur Web sur un téléphone Android connecté au réseau via WiFi. Un navigateur sur un PC connecté au réseau via WiFi ou par câble fonctionnera également.\nLe schéma de circuit\nLes connexions des boutons-poussoirs et des voyants sont indiquées dans le schéma de circuit ci-dessous.\n\t\nArduino Web Server Switch et connexions LED\nLe matériel se compose de deux boutons-poussoirs tactiles momentanés et de deux voyants connectés à l’Arduino avec Ethernet Shield. Les commutateurs ont des résistances de 10kΩ chacune et les LED ont des résistances de limitation de courant de 470Ω.\nCode Arduino et page HTML\nTéléchargez le code compressé ici ou copiez et collez ci-dessous.\nEsquisse Arduino et page HTML compressée: web_server_hw_button_pg_button.zip (4.8kB)\nArduino Sketch\nL&#39;esquisse Arduino consiste en une version modifiée du code de la partie 16 du tutoriel du serveur Web Arduino sur le serveur Web Ajax I / O.\n\n/ * ---------------------------------------------------- --------------\n  Programme: web_server_hw_button_pg_button\n\n  Description: serveur Web Arduino permettant à deux voyants\n                contrôlée par une case à cocher, un bouton HTML et deux\n                boutons-poussoirs matériels.\n                La page Web est stockée sur la carte micro SD.\n  \n  Matériel: Arduino Uno et Arduino Ethernet officiel\n                bouclier. Devrait fonctionner avec d’autres Arduinos et\n                boucliers Ethernet compatibles.\n                Carte micro SD de 2 Go formatée FAT16.\n                LED sur les broches 6 et 7.\n                Active les broches 2 et 3.\n                \n  Logiciel: développé à l&#39;aide du logiciel Arduino 1.6.1\n                Devrait être compatible avec Arduino 1.0 +\n                La carte SD contient une page Web appelée index.htm\n  \n  Références: - Basé sur l&#39;exemple Ajax I / O de Starting\n                  Électronique:\n                  http://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/SD-card-IO/\n                  \n                - Basculer le mode anti-rebond à partir du code exemple Arduino IDE\n                  Fichier -&gt; Exemples -&gt; 02.Digital -&gt; Debounce\n                  http://www.arduino.cc/en/Tutorial/Debounce\n\n  Date: 13 avril 2015\n \n  Auteur: W.A. Smith, http://startingelectronics.org\n-------------------------------------------------- ------------ * /\n\n#include &lt;SPI.h&gt;\n#include &lt;Ethernet.h&gt;\n#include &lt;Dakota du Sud.h&gt;\n// taille de la mémoire tampon utilisée pour capturer les requêtes HTTP\n#define REQ_BUF_SZ 60\n\n// adresse MAC de l&#39;autocollant du bouclier Ethernet sous la carte\noctet Mac[] = 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED;\nAdresse IP ip (192, 168, 0, 20); // adresse IP, il peut être nécessaire de changer en fonction du réseau\nEthernetServer serveur (80);  // crée un serveur sur le port 80\nFichier webFile;               // le fichier de page Web sur la carte SD\ncarboniser HTTP_req[REQ_BUF_SZ] = 0; // requête HTTP en mémoire tampon stockée sous forme de chaîne terminée par un caractère null\ncarboniser req_index = 0;              // index dans le tampon HTTP_req\nbooléen LED_state[2] = 0; // stocke les états des LED\n\nvide installer()\n\n    // désactiver la puce Ethernet\n    pinMode(dix, SORTIE)\n    digitalWrite(dix, HAUTE)\n    \n    En série.commencer(9600);       // pour le débogage\n    \n    // initialise la carte SD\n    En série.imprimer(&quot;Initialisation de la carte SD ...&quot;)\n    si (!Dakota du Sud.commencer(4)) \n        En série.imprimer(&quot;ERREUR - L&#39;initialisation de la carte SD a échoué!&quot;)\n        revenir;    // l&#39;initialisation a échoué\n    \n    En série.imprimer(&quot;SUCCESS - Carte SD initialisée.&quot;)\n    // vérifier le fichier index.htm\n    si (!Dakota du Sud.existe(&quot;index.htm&quot;)) \n        En série.imprimer(&quot;ERREUR - Impossible de trouver le fichier index.htm!&quot;)\n        revenir;  // impossible de trouver le fichier d&#39;index\n    \n    En série.imprimer(&quot;SUCCESS - Fichier index.htm trouvé.&quot;)\n    // commutateurs\n    pinMode(2, CONTRIBUTION)\n    pinMode(3, CONTRIBUTION)\n    // LED\n    pinMode(6, SORTIE)\n    pinMode(sept, SORTIE)\n    \n    Ethernet.commencer(mac, ip);  // initialise le périphérique Ethernet\n    serveur.commencer();           // commence à écouter les clients\n\n\nvide boucle()\n{\n    EthernetClient client = serveur.disponible();  // essaie d&#39;obtenir un client\n\n    si (client) {  // client obtenu?\n        booléen currentLineIsBlank = vrai;\n        tandis que (client.lié()) {\n            si (client.disponible()) {   // données client disponibles à lire\n                carboniser c = client.lis(); // lit 1 octet (caractère) du client\n                // limite la taille de la requête HTTP reçue stockée\n                // tampon la première partie de la requête HTTP dans un tableau HTTP_req (chaîne)\n                // laisse le dernier élément du tableau sous la forme 0 à une chaîne de terminaison nulle (REQ_BUF_SZ - 1)\n                si (req_index &lt;(REQ_BUF_SZ - 1)) \nHTTP_req[req_index] = C;          // sauvegarde le caractère de la requête HTTP\n                    req_index ++;\n\n                // la dernière ligne de la demande du client est vide et se termine par  n\n                // répond au client seulement après la dernière ligne reçue\n                si (c == &#39; n&#39; &amp;&amp; currentLineIsBlank) \n                    // envoie un en-tête de réponse http standard\n                    client.imprimer(&quot;HTTP / 1.1 200 OK&quot;)\n                    // le reste de l&#39;en-tête suit ci-dessous, selon si\n                    // une page Web ou une page XML est demandée\n                    // demande Ajax - envoi d&#39;un fichier XML\n                    si (StrContains (HTTP_req, &quot;ajax_inputs&quot;)) \n                        // envoie le reste de l&#39;en-tête HTTP\n                        client.imprimer(&quot;Content-Type: text / xml&quot;)\nclient.imprimer(&quot;Connexion: garder en vie&quot;)\nclient.imprimer();\nSetLEDs ();\n                        // envoie un fichier XML contenant des états d&#39;entrée\n                        Réponse XML (client);\n\n                    autre   // demande de page Web\n                        // envoie le reste de l&#39;en-tête HTTP\n                        client.imprimer(&quot;Content-Type: text / html&quot;)\nclient.imprimer(&quot;Connexion: garder en vie&quot;)\nclient.imprimer();\n                        // envoyer une page Web\n                        webFile = Dakota du Sud.ouvert(&quot;index.htm&quot;)        // ouvrir un fichier de page Web\n                        si (webFile) \n                            tandis que(webFile.disponible()) \nclient.écrire(webFile.lis()); // envoyer une page Web au client\n                            \nwebFile.proche();\n\n\n                    // affiche la requête HTTP reçue sur le port série\n                    En série.impression(HTTP_req);\n                    // réinitialise l&#39;index du tampon et tous les éléments du tampon à 0\n                    req_index = 0;\nStrClear (HTTP_req, REQ_BUF_SZ);\n                    Pause;\n\n                // chaque ligne de texte reçue du client se termine par  r  n\n                si (c == &#39; n&#39;) \n                    // dernier caractère sur la ligne du texte reçu\n                    // commence une nouvelle ligne avec le caractère suivant lu\n                    currentLineIsBlank = vrai;\n \n                autre si (c! = &#39; r&#39;) \n                    // un caractère de texte a été reçu du client\n                    currentLineIsBlank = faux;\n\n} // fin si (client.available ())\n        } // fin tout le temps (client.connected ())\n        retard(1);      // donne le temps au navigateur Web pour recevoir les données\n        client.Arrêtez(); // ferme la connexion\n    } // fin si (client)\n    \n    // lire les boutons et les rebonds\n    ButtonDebounce ();\n}\n\n// la fonction lit les états des commutateurs à bouton-poussoir, les affiche et verrouille les états des voyants\n// bascule les états des voyants à chaque cycle push-release\n// codé en dur pour faire rebondir deux commutateurs sur les broches 2 et 3; et deux LED sur les broches 6 et 7\n// fonction adaptée de l&#39;exemple intégré Arduino IDE:\n// Fichier -&gt; Exemples -&gt; 02.Digital -&gt; Debounce\nvide ButtonDebounce (vide)\n{\n    statique octet buttonState[2]     = FAIBLE, FAIBLE;   // la lecture actuelle de la broche d&#39;entrée\n    statique octet lastButtonState[2] = FAIBLE, FAIBLE;   // la lecture précédente de la broche d&#39;entrée\n    \n    // les variables suivantes sont longues car le temps, mesuré en millisecondes,\n    // deviendra rapidement un nombre plus grand que ce qui peut être stocké dans un int.\n    statique longue lastDebounceTime[2] = 0;  // la dernière fois que la broche de sortie a été basculée\n    longue debounceDelay = 50;         // le temps de rebond; augmenter si la sortie scintille\n  \n    octet en train de lire[2];\n\nen train de lire[0] = numériqueLire(2);\nen train de lire[1] = numériqueLire(3);\n    \n    pour (int i = 0; i &lt;2; i ++) \n        si (en train de lire[i] ! = lastButtonState[i]) \n            // réinitialiser le minuteur anti-rebond\n            lastDebounceTime[i] = millis();\n\n      \n        si ((millis() - lastDebounceTime[i])&gt; debounceDelay) \n            // peu importe la lecture, ça fait plus longtemps\n            // que le délai anti-rebond, considérons-le comme l&#39;état actuel:\n        \n            // si l&#39;état du bouton a changé:\n            si (en train de lire[i] ! = buttonState[i]) \nbuttonState[i] = Lecture[i];\n          \n                // n&#39;inclue la LED que si le nouvel état du bouton est HIGH\n                si (buttonState[i] == HAUTE) \nLED_state[i] =! LED_state[i];\n\n\n\n // fin de la boucle ()\n    \n    // régler les voyants\n    digitalWrite(6, LED_state[0])\n    digitalWrite(7, LED_state[1])\n      \n    // sauvegarde la lecture. La prochaine fois dans la boucle,\n    // ce sera le lastButtonState:\n    lastButtonState[0] = Lecture[0];\nlastButtonState[1] = Lecture[1];\n}\n\n// vérifie si la requête HTTP reçue allume / éteint les voyants\n// enregistre également l&#39;état des voyants\nvide SetLEDs (vide)\n\n    // LED 1 (broche 6)\n    si (StrContains (HTTP_req, &quot;LED1 = 1&quot;)) \nLED_state[0] = 1;  // enregistrer l&#39;état de la LED\n        digitalWrite(6, HAUTE)\n\n    autre si (StrContains (HTTP_req, &quot;LED1 = 0&quot;)) \nLED_state[0] = 0;  // enregistrer l&#39;état de la LED\n        digitalWrite(6, FAIBLE)\n\n    // LED 2 (broche 7)\n    si (StrContains (HTTP_req, &quot;LED2 = 1&quot;)) \nLED_state[1] = 1;  // enregistrer l&#39;état de la LED\n        digitalWrite(sept, HAUTE)\n\n    autre si (StrContains (HTTP_req, &quot;LED2 = 0&quot;)) \nLED_state[1] = 0;  // enregistrer l&#39;état de la LED\n        digitalWrite(sept, FAIBLE)\n\n\n\n// envoie le fichier XML avec des valeurs analogiques, changez le statut\n// et statut de la LED\nvide XML_response (EthernetClient cl)\n\n    int analog_val;            // stocke la valeur lue des entrées analogiques\n    int compter;                 // utilisé par les boucles &#39;pour&#39;\n    int sw_arr[] = 2, 3;  // broches interfacées avec des commutateurs\n    \n    cl.impression(&quot;&quot;)\ncl.impression(&quot;&quot;)\n    // Etat de la case à cocher\n    // LED1\n    cl.impression(&quot;&quot;)\n    si (LED_state[0]) \ncl.impression(&quot;vérifié&quot;)\n\n    autre \ncl.impression(&quot;décoché&quot;)\n\ncl.imprimer(&quot;&quot;)\n    // états de la LED du bouton\n    // LED3\n    cl.impression(&quot;&quot;)\n    si (LED_state[1]) \ncl.impression(&quot;sur&quot;)\n\n    autre \ncl.impression(&quot;de&quot;)\n\ncl.imprimer(&quot;&quot;)\ncl.impression(&quot;&quot;)\n\n\n// met tous les éléments de str à 0 (efface le tableau)\nvide StrClear (carboniser * str, carboniser longueur)\n\n    pour (int i = 0; je &lt; longueur; i ++) \nstr[i] = 0;\n\n\n\n// recherche la chaîne sfind dans la chaîne str\n// retourne 1 si une chaîne est trouvée\n// retourne 0 si la chaîne est introuvable\ncarboniser StrContains (carboniser * str, carboniser * sfind)\n\n    carboniser trouvé = 0;\n    carboniser indice = 0;\n    carboniser len;\n\nlen = strlen (str);\n    \n    si (strlen (sfind)&gt; len) \n        revenir 0;\n\n    tandis que (index &lt;len) \n        si (str[index] == sfind[found]) \ntrouvé ++;\n            si (strlen (sfind) == trouvé) \n                revenir 1;\n\n\n        autre \ntrouvé = 0;\n\nindex ++;\n\n\n    revenir 0;\n\n\n\nPage HTML avec CSS et JavaScript intégrés\nLe code ci-dessous doit être copié dans un fichier appelé index.htm et le fichier index.htm doit être copié sur une carte micro SD à insérer dans la fente pour carte du bouclier Arduino.\nLe code HTML avec CSS et JavaScript incorporés consiste en une version modifiée du code de la partie 16 du tutoriel du serveur Web Arduino sur le serveur Web Ajax I / O.\n\n\n\n    \n        Arduino Ajax LED Button Control\n        \n    \n    \n    \n        Arduino Ajax LED Button Control\n        \n            LED utilisant la case à cocher\n            \n                LED 1 (D6)\n            \n        \n        \n            LED utilisant le bouton\n            La LED 2 est éteinte (D7)\n        \n    \n\n\n\nComment fonctionne le code\nLe code Arduino et la page HTML ont été copiés à partir de la partie 16 du didacticiel du serveur Web Arduino et modifiés.\nLe code a été nettoyé\nTous les codes inutiles pour les entrées analogiques, les cases à cocher et les boutons supplémentaires ont été supprimés des codes HTML, JavaScript et Arduino. Le code qui contrôle le voyant 2 a été modifié pour utiliser un bouton HTML.\nÀ ce stade, les deux voyants peuvent être contrôlés à l&#39;aide d&#39;une case à cocher sur la page Web hébergée sur Arduino pour le premier voyant et d&#39;un bouton sur la page HTML pour le deuxième voyant.\nAjout du code de contrôle du bouton physique\nRien de plus ne devait être modifié dans le code HTML / JavaScript pour les commutateurs matériels car les états des voyants étaient déjà renvoyés à la page Web à l&#39;aide de Ajax. L&#39;ajout de deux boutons poussoirs physiques pour contrôler les voyants mettrait à jour les états mémorisés des voyants dans l&#39;Arduino, qui seraient ensuite envoyés à la page Web lors de la prochaine demande Ajax.\nBasculer le rebondissement et le verrouillage\nLes boutons-poussoirs momentanés ne se verrouillent pas. En appuyant sur le bouton, vous fermez le circuit. Relâchez le bouton. Le circuit s&#39;ouvre à nouveau. Les contacts ne restent jamais fermés, mais restent ouverts lorsque le bouton est relâché.\nLes boutons, commutateurs et relais ont tous un rebond de contact. C’est-à-dire que lorsque les contacts du commutateur sont fermés, ils ne se ferment pas proprement et restent fermés, mais rebondissent plutôt pendant un court laps de temps.\nPar rebond, nous voulons dire qu’ils se ferment initialement, puis rebondissent, puis se referment, puis s’ouvrent et se referment plusieurs fois avant de s’installer. Ce rebond ne sera pas perçu si le commutateur est utilisé dans un circuit qui allume directement une lumière, mais sera détecté par un microcontrôleur fonctionnant à plusieurs mégahertz.\nLes commutateurs peuvent être &quot;traités&quot; à l&#39;aide d&#39;un logiciel qui attend que les contacts du commutateur soient réglés.\nIl existe déjà quelques logiciels dans les exemples intégrés Arduino IDE qui permettent de transformer un commutateur à bouton-poussoir momentané en un commutateur à verrouillage et de supprimer simultanément les contacts du commutateur.\nL&#39;exemple peut être trouvé dans le menu Arduino IDE: Fichier → Exemples → 02. Numérique → Debounce\nLorsque cet exemple de code est chargé sur l’Arduino, appuyez et relâchez une fois le commutateur à bouton-poussoir pour allumer un voyant. Appuyer et relâcher une seconde fois le bouton-poussoir éteint la DEL.\nDans le code Arduino de ce projet, l’IDE ​​Arduino Debounce exemple de code est utilisé dans la fonction ButtonDebounce () faire rebondir et verrouiller les deux boutons-poussoirs et basculer les états des voyants.\nLe code est modifié pour gérer deux boutons poussoirs et deux voyants en convertissant les variables du code en tableaux bidimensionnels et en utilisant un élément du tableau par paire de boutons poussoirs / voyants.\nMise à jour des états des voyants sur la page Web\nLe tableau LED_state[]  conserve les états actuels des deux voyants et est modifié par le ButtonDebounce () une fonction. Ce même tableau est également modifié par la case à cocher et le bouton HTML de la page Web dans la SetLEDs () une fonction.\nLorsque vous appuyez sur un bouton physique ou que vous cliquez sur la case à cocher ou le bouton HTML sur la page Web, l’état de la DEL est mis à jour dans LED_state[]  tableau.\nLa prochaine fois que la page Web effectue une demande Ajax, le voyant indique LED_state[]  sont utilisés pour mettre à jour le fichier XML qui est renvoyé à la page Web lorsque le XML_response () la fonction est appelée.\nCeci met à jour la case à cocher pour cocher ou décocher et le texte du bouton HTML pour ON ou OFF.\n\nVeuillez activer JavaScript pour afficher les commentaires générés par Disqus.\n\nClick to rate this post!\r\n                                   \r\n                               [Total: 0  Average: 0]","paragraphs":["Créé le: 13 avril 2015\nCe projet de carte de visite Arduino utilise un blindage Arduino Uno et Arduino Ethernet avec une carte SD en tant que serveur Web. Deux boutons poussoirs et deux DEL sont connectés à l’Arduino.\nLa page Web hébergée par le serveur Web Arduino permet à une LED d&#39;être contrôlée par une case à cocher et à l&#39;autre par un bouton HTML sur la page Web.\nLes deux mêmes DEL sont également contrôlées par deux boutons-poussoirs. Lorsqu&#39;une LED est allumée ou éteinte à partir de la page Web, son état est visible dans la case à cocher ou dans le texte du bouton.\nLa case à cocher et le texte du bouton sont également mis à jour si vous appuyez sur les boutons physiques pour allumer ou éteindre les voyants. Ajax est utilisé sur la page Web afin que les mises à jour de cette page soient exemptes de tout scintillement.\nLa vidéo ci-dessous montre le circuit exploité à partir du navigateur Web sur un téléphone Android connecté au réseau via WiFi. Un navigateur sur un PC connecté au réseau via WiFi ou par câble fonctionnera également.\nLe schéma de circuit\nLes connexions des boutons-poussoirs et des voyants sont indiquées dans le schéma de circuit ci-dessous.\n\t\nArduino Web Server Switch et connexions LED\nLe matériel se compose de deux boutons-poussoirs tactiles momentanés et de deux voyants connectés à l’Arduino avec Ethernet Shield. Les commutateurs ont des résistances de 10kΩ chacune et les LED ont des résistances de limitation de courant de 470Ω.\nCode Arduino et page HTML\nTéléchargez le code compressé ici ou copiez et collez ci-dessous.\nEsquisse Arduino et page HTML compressée: web_server_hw_button_pg_button.zip (4.8kB)\nArduino Sketch\nL&#39;esquisse Arduino consiste en une version modifiée du code de la partie 16 du tutoriel du serveur Web Arduino sur le serveur Web Ajax I / O.","/ * ---------------------------------------------------- --------------\n  Programme: web_server_hw_button_pg_button","Description: serveur Web Arduino permettant à deux voyants\n                contrôlée par une case à cocher, un bouton HTML et deux\n                boutons-poussoirs matériels.\n                La page Web est stockée sur la carte micro SD.\n  \n  Matériel: Arduino Uno et Arduino Ethernet officiel\n                bouclier. Devrait fonctionner avec d’autres Arduinos et\n                boucliers Ethernet compatibles.\n                Carte micro SD de 2 Go formatée FAT16.\n                LED sur les broches 6 et 7.\n                Active les broches 2 et 3.\n                \n  Logiciel: développé à l&#39;aide du logiciel Arduino 1.6.1\n                Devrait être compatible avec Arduino 1.0 +\n                La carte SD contient une page Web appelée index.htm\n  \n  Références: - Basé sur l&#39;exemple Ajax I / O de Starting\n                  Électronique:\n                  http://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/SD-card-IO/\n                  \n                - Basculer le mode anti-rebond à partir du code exemple Arduino IDE\n                  Fichier -&gt; Exemples -&gt; 02.Digital -&gt; Debounce\n                  http://www.arduino.cc/en/Tutorial/Debounce","Date: 13 avril 2015\n \n  Auteur: W.A. Smith, http://startingelectronics.org\n-------------------------------------------------- ------------ * /","#include &lt;SPI.h&gt;\n#include &lt;Ethernet.h&gt;\n#include &lt;Dakota du Sud.h&gt;\n// taille de la mémoire tampon utilisée pour capturer les requêtes HTTP\n#define REQ_BUF_SZ 60","// adresse MAC de l&#39;autocollant du bouclier Ethernet sous la carte\noctet Mac[] = 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED;\nAdresse IP ip (192, 168, 0, 20); // adresse IP, il peut être nécessaire de changer en fonction du réseau\nEthernetServer serveur (80);  // crée un serveur sur le port 80\nFichier webFile;               // le fichier de page Web sur la carte SD\ncarboniser HTTP_req[REQ_BUF_SZ] = 0; // requête HTTP en mémoire tampon stockée sous forme de chaîne terminée par un caractère null\ncarboniser req_index = 0;              // index dans le tampon HTTP_req\nbooléen LED_state[2] = 0; // stocke les états des LED","vide installer()","// désactiver la puce Ethernet\n    pinMode(dix, SORTIE)\n    digitalWrite(dix, HAUTE)\n    \n    En série.commencer(9600);       // pour le débogage\n    \n    // initialise la carte SD\n    En série.imprimer(&quot;Initialisation de la carte SD ...&quot;)\n    si (!Dakota du Sud.commencer(4)) \n        En série.imprimer(&quot;ERREUR - L&#39;initialisation de la carte SD a échoué!&quot;)\n        revenir;    // l&#39;initialisation a échoué\n    \n    En série.imprimer(&quot;SUCCESS - Carte SD initialisée.&quot;)\n    // vérifier le fichier index.htm\n    si (!Dakota du Sud.existe(&quot;index.htm&quot;)) \n        En série.imprimer(&quot;ERREUR - Impossible de trouver le fichier index.htm!&quot;)\n        revenir;  // impossible de trouver le fichier d&#39;index\n    \n    En série.imprimer(&quot;SUCCESS - Fichier index.htm trouvé.&quot;)\n    // commutateurs\n    pinMode(2, CONTRIBUTION)\n    pinMode(3, CONTRIBUTION)\n    // LED\n    pinMode(6, SORTIE)\n    pinMode(sept, SORTIE)\n    \n    Ethernet.commencer(mac, ip);  // initialise le périphérique Ethernet\n    serveur.commencer();           // commence à écouter les clients","vide boucle()\n{\n    EthernetClient client = serveur.disponible();  // essaie d&#39;obtenir un client","si (client) {  // client obtenu?\n        booléen currentLineIsBlank = vrai;\n        tandis que (client.lié()) {\n            si (client.disponible()) {   // données client disponibles à lire\n                carboniser c = client.lis(); // lit 1 octet (caractère) du client\n                // limite la taille de la requête HTTP reçue stockée\n                // tampon la première partie de la requête HTTP dans un tableau HTTP_req (chaîne)\n                // laisse le dernier élément du tableau sous la forme 0 à une chaîne de terminaison nulle (REQ_BUF_SZ - 1)\n                si (req_index &lt;(REQ_BUF_SZ - 1)) \nHTTP_req[req_index] = C;          // sauvegarde le caractère de la requête HTTP\n                    req_index ++;","// la dernière ligne de la demande du client est vide et se termine par  n\n                // répond au client seulement après la dernière ligne reçue\n                si (c == &#39; n&#39; &amp;&amp; currentLineIsBlank) \n                    // envoie un en-tête de réponse http standard\n                    client.imprimer(&quot;HTTP / 1.1 200 OK&quot;)\n                    // le reste de l&#39;en-tête suit ci-dessous, selon si\n                    // une page Web ou une page XML est demandée\n                    // demande Ajax - envoi d&#39;un fichier XML\n                    si (StrContains (HTTP_req, &quot;ajax_inputs&quot;)) \n                        // envoie le reste de l&#39;en-tête HTTP\n                        client.imprimer(&quot;Content-Type: text / xml&quot;)\nclient.imprimer(&quot;Connexion: garder en vie&quot;)\nclient.imprimer();\nSetLEDs ();\n                        // envoie un fichier XML contenant des états d&#39;entrée\n                        Réponse XML (client);","autre   // demande de page Web\n                        // envoie le reste de l&#39;en-tête HTTP\n                        client.imprimer(&quot;Content-Type: text / html&quot;)\nclient.imprimer(&quot;Connexion: garder en vie&quot;)\nclient.imprimer();\n                        // envoyer une page Web\n                        webFile = Dakota du Sud.ouvert(&quot;index.htm&quot;)        // ouvrir un fichier de page Web\n                        si (webFile) \n                            tandis que(webFile.disponible()) \nclient.écrire(webFile.lis()); // envoyer une page Web au client\n                            \nwebFile.proche();","// affiche la requête HTTP reçue sur le port série\n                    En série.impression(HTTP_req);\n                    // réinitialise l&#39;index du tampon et tous les éléments du tampon à 0\n                    req_index = 0;\nStrClear (HTTP_req, REQ_BUF_SZ);\n                    Pause;","// chaque ligne de texte reçue du client se termine par  r  n\n                si (c == &#39; n&#39;) \n                    // dernier caractère sur la ligne du texte reçu\n                    // commence une nouvelle ligne avec le caractère suivant lu\n                    currentLineIsBlank = vrai;\n \n                autre si (c! = &#39; r&#39;) \n                    // un caractère de texte a été reçu du client\n                    currentLineIsBlank = faux;","} // fin si (client.available ())\n        } // fin tout le temps (client.connected ())\n        retard(1);      // donne le temps au navigateur Web pour recevoir les données\n        client.Arrêtez(); // ferme la connexion\n    } // fin si (client)\n    \n    // lire les boutons et les rebonds\n    ButtonDebounce ();\n}","// la fonction lit les états des commutateurs à bouton-poussoir, les affiche et verrouille les états des voyants\n// bascule les états des voyants à chaque cycle push-release\n// codé en dur pour faire rebondir deux commutateurs sur les broches 2 et 3; et deux LED sur les broches 6 et 7\n// fonction adaptée de l&#39;exemple intégré Arduino IDE:\n// Fichier -&gt; Exemples -&gt; 02.Digital -&gt; Debounce\nvide ButtonDebounce (vide)\n{\n    statique octet buttonState[2]     = FAIBLE, FAIBLE;   // la lecture actuelle de la broche d&#39;entrée\n    statique octet lastButtonState[2] = FAIBLE, FAIBLE;   // la lecture précédente de la broche d&#39;entrée\n    \n    // les variables suivantes sont longues car le temps, mesuré en millisecondes,\n    // deviendra rapidement un nombre plus grand que ce qui peut être stocké dans un int.\n    statique longue lastDebounceTime[2] = 0;  // la dernière fois que la broche de sortie a été basculée\n    longue debounceDelay = 50;         // le temps de rebond; augmenter si la sortie scintille\n  \n    octet en train de lire[2];","en train de lire[0] = numériqueLire(2);\nen train de lire[1] = numériqueLire(3);\n    \n    pour (int i = 0; i &lt;2; i ++) \n        si (en train de lire[i] ! = lastButtonState[i]) \n            // réinitialiser le minuteur anti-rebond\n            lastDebounceTime[i] = millis();","si ((millis() - lastDebounceTime[i])&gt; debounceDelay) \n            // peu importe la lecture, ça fait plus longtemps\n            // que le délai anti-rebond, considérons-le comme l&#39;état actuel:\n        \n            // si l&#39;état du bouton a changé:\n            si (en train de lire[i] ! = buttonState[i]) \nbuttonState[i] = Lecture[i];\n          \n                // n&#39;inclue la LED que si le nouvel état du bouton est HIGH\n                si (buttonState[i] == HAUTE) \nLED_state[i] =! LED_state[i];","// fin de la boucle ()\n    \n    // régler les voyants\n    digitalWrite(6, LED_state[0])\n    digitalWrite(7, LED_state[1])\n      \n    // sauvegarde la lecture. La prochaine fois dans la boucle,\n    // ce sera le lastButtonState:\n    lastButtonState[0] = Lecture[0];\nlastButtonState[1] = Lecture[1];\n}","// vérifie si la requête HTTP reçue allume / éteint les voyants\n// enregistre également l&#39;état des voyants\nvide SetLEDs (vide)","// LED 1 (broche 6)\n    si (StrContains (HTTP_req, &quot;LED1 = 1&quot;)) \nLED_state[0] = 1;  // enregistrer l&#39;état de la LED\n        digitalWrite(6, HAUTE)","autre si (StrContains (HTTP_req, &quot;LED1 = 0&quot;)) \nLED_state[0] = 0;  // enregistrer l&#39;état de la LED\n        digitalWrite(6, FAIBLE)","// LED 2 (broche 7)\n    si (StrContains (HTTP_req, &quot;LED2 = 1&quot;)) \nLED_state[1] = 1;  // enregistrer l&#39;état de la LED\n        digitalWrite(sept, HAUTE)","autre si (StrContains (HTTP_req, &quot;LED2 = 0&quot;)) \nLED_state[1] = 0;  // enregistrer l&#39;état de la LED\n        digitalWrite(sept, FAIBLE)","// envoie le fichier XML avec des valeurs analogiques, changez le statut\n// et statut de la LED\nvide XML_response (EthernetClient cl)","int analog_val;            // stocke la valeur lue des entrées analogiques\n    int compter;                 // utilisé par les boucles &#39;pour&#39;\n    int sw_arr[] = 2, 3;  // broches interfacées avec des commutateurs\n    \n    cl.impression(&quot;&quot;)\ncl.impression(&quot;&quot;)\n    // Etat de la case à cocher\n    // LED1\n    cl.impression(&quot;&quot;)\n    si (LED_state[0]) \ncl.impression(&quot;vérifié&quot;)","autre \ncl.impression(&quot;décoché&quot;)","cl.imprimer(&quot;&quot;)\n    // états de la LED du bouton\n    // LED3\n    cl.impression(&quot;&quot;)\n    si (LED_state[1]) \ncl.impression(&quot;sur&quot;)","autre \ncl.impression(&quot;de&quot;)","cl.imprimer(&quot;&quot;)\ncl.impression(&quot;&quot;)","// met tous les éléments de str à 0 (efface le tableau)\nvide StrClear (carboniser * str, carboniser longueur)","pour (int i = 0; je &lt; longueur; i ++) \nstr[i] = 0;","// recherche la chaîne sfind dans la chaîne str\n// retourne 1 si une chaîne est trouvée\n// retourne 0 si la chaîne est introuvable\ncarboniser StrContains (carboniser * str, carboniser * sfind)","carboniser trouvé = 0;\n    carboniser indice = 0;\n    carboniser len;","len = strlen (str);\n    \n    si (strlen (sfind)&gt; len) \n        revenir 0;","tandis que (index &lt;len) \n        si (str[index] == sfind[found]) \ntrouvé ++;\n            si (strlen (sfind) == trouvé) \n                revenir 1;","autre \ntrouvé = 0;","index ++;","revenir 0;","Page HTML avec CSS et JavaScript intégrés\nLe code ci-dessous doit être copié dans un fichier appelé index.htm et le fichier index.htm doit être copié sur une carte micro SD à insérer dans la fente pour carte du bouclier Arduino.\nLe code HTML avec CSS et JavaScript incorporés consiste en une version modifiée du code de la partie 16 du tutoriel du serveur Web Arduino sur le serveur Web Ajax I / O.","Arduino Ajax LED Button Control\n        \n    \n    \n    \n        Arduino Ajax LED Button Control\n        \n            LED utilisant la case à cocher\n            \n                LED 1 (D6)\n            \n        \n        \n            LED utilisant le bouton\n            La LED 2 est éteinte (D7)","Comment fonctionne le code\nLe code Arduino et la page HTML ont été copiés à partir de la partie 16 du didacticiel du serveur Web Arduino et modifiés.\nLe code a été nettoyé\nTous les codes inutiles pour les entrées analogiques, les cases à cocher et les boutons supplémentaires ont été supprimés des codes HTML, JavaScript et Arduino. Le code qui contrôle le voyant 2 a été modifié pour utiliser un bouton HTML.\nÀ ce stade, les deux voyants peuvent être contrôlés à l&#39;aide d&#39;une case à cocher sur la page Web hébergée sur Arduino pour le premier voyant et d&#39;un bouton sur la page HTML pour le deuxième voyant.\nAjout du code de contrôle du bouton physique\nRien de plus ne devait être modifié dans le code HTML / JavaScript pour les commutateurs matériels car les états des voyants étaient déjà renvoyés à la page Web à l&#39;aide de Ajax. L&#39;ajout de deux boutons poussoirs physiques pour contrôler les voyants mettrait à jour les états mémorisés des voyants dans l&#39;Arduino, qui seraient ensuite envoyés à la page Web lors de la prochaine demande Ajax.\nBasculer le rebondissement et le verrouillage\nLes boutons-poussoirs momentanés ne se verrouillent pas. En appuyant sur le bouton, vous fermez le circuit. Relâchez le bouton. Le circuit s&#39;ouvre à nouveau. Les contacts ne restent jamais fermés, mais restent ouverts lorsque le bouton est relâché.\nLes boutons, commutateurs et relais ont tous un rebond de contact. C’est-à-dire que lorsque les contacts du commutateur sont fermés, ils ne se ferment pas proprement et restent fermés, mais rebondissent plutôt pendant un court laps de temps.\nPar rebond, nous voulons dire qu’ils se ferment initialement, puis rebondissent, puis se referment, puis s’ouvrent et se referment plusieurs fois avant de s’installer. Ce rebond ne sera pas perçu si le commutateur est utilisé dans un circuit qui allume directement une lumière, mais sera détecté par un microcontrôleur fonctionnant à plusieurs mégahertz.\nLes commutateurs peuvent être &quot;traités&quot; à l&#39;aide d&#39;un logiciel qui attend que les contacts du commutateur soient réglés.\nIl existe déjà quelques logiciels dans les exemples intégrés Arduino IDE qui permettent de transformer un commutateur à bouton-poussoir momentané en un commutateur à verrouillage et de supprimer simultanément les contacts du commutateur.\nL&#39;exemple peut être trouvé dans le menu Arduino IDE: Fichier → Exemples → 02. Numérique → Debounce\nLorsque cet exemple de code est chargé sur l’Arduino, appuyez et relâchez une fois le commutateur à bouton-poussoir pour allumer un voyant. Appuyer et relâcher une seconde fois le bouton-poussoir éteint la DEL.\nDans le code Arduino de ce projet, l’IDE ​​Arduino Debounce exemple de code est utilisé dans la fonction ButtonDebounce () faire rebondir et verrouiller les deux boutons-poussoirs et basculer les états des voyants.\nLe code est modifié pour gérer deux boutons poussoirs et deux voyants en convertissant les variables du code en tableaux bidimensionnels et en utilisant un élément du tableau par paire de boutons poussoirs / voyants.\nMise à jour des états des voyants sur la page Web\nLe tableau LED_state[]  conserve les états actuels des deux voyants et est modifié par le ButtonDebounce () une fonction. Ce même tableau est également modifié par la case à cocher et le bouton HTML de la page Web dans la SetLEDs () une fonction.\nLorsque vous appuyez sur un bouton physique ou que vous cliquez sur la case à cocher ou le bouton HTML sur la page Web, l’état de la DEL est mis à jour dans LED_state[]  tableau.\nLa prochaine fois que la page Web effectue une demande Ajax, le voyant indique LED_state[]  sont utilisés pour mettre à jour le fichier XML qui est renvoyé à la page Web lorsque le XML_response () la fonction est appelée.\nCeci met à jour la case à cocher pour cocher ou décocher et le texte du bouton HTML pour ON ou OFF.","Veuillez activer JavaScript pour afficher les commentaires générés par Disqus.","Click to rate this post!\n                                   \n                               [Total: 0  Average: 0]"],"content_blocks":[{"id":"text-1","type":"text","heading":"","plain_text":"Créé le: 13 avril 2015\nCe projet de carte de visite Arduino utilise un blindage Arduino Uno et Arduino Ethernet avec une carte SD en tant que serveur Web. Deux boutons poussoirs et deux DEL sont connectés à l’Arduino.\nLa page Web hébergée par le serveur Web Arduino permet à une LED d&#39;être contrôlée par une case à cocher et à l&#39;autre par un bouton HTML sur la page Web.\nLes deux mêmes DEL sont également contrôlées par deux boutons-poussoirs. Lorsqu&#39;une LED est allumée ou éteinte à partir de la page Web, son état est visible dans la case à cocher ou dans le texte du bouton.\nLa case à cocher et le texte du bouton sont également mis à jour si vous appuyez sur les boutons physiques pour allumer ou éteindre les voyants. Ajax est utilisé sur la page Web afin que les mises à jour de cette page soient exemptes de tout scintillement.\nLa vidéo ci-dessous montre le circuit exploité à partir du navigateur Web sur un téléphone Android connecté au réseau via WiFi. Un navigateur sur un PC connecté au réseau via WiFi ou par câble fonctionnera également.\nLe schéma de circuit\nLes connexions des boutons-poussoirs et des voyants sont indiquées dans le schéma de circuit ci-dessous.\n\t\nArduino Web Server Switch et connexions LED\nLe matériel se compose de deux boutons-poussoirs tactiles momentanés et de deux voyants connectés à l’Arduino avec Ethernet Shield. Les commutateurs ont des résistances de 10kΩ chacune et les LED ont des résistances de limitation de courant de 470Ω.\nCode Arduino et page HTML\nTéléchargez le code compressé ici ou copiez et collez ci-dessous.\nEsquisse Arduino et page HTML compressée: web_server_hw_button_pg_button.zip (4.8kB)\nArduino Sketch\nL&#39;esquisse Arduino consiste en une version modifiée du code de la partie 16 du tutoriel du serveur Web Arduino sur le serveur Web Ajax I / O.","html":"<p>Créé le: 13 avril 2015\nCe projet de carte de visite Arduino utilise un blindage Arduino Uno et Arduino Ethernet avec une carte SD en tant que serveur Web. Deux boutons poussoirs et deux DEL sont connectés à l’Arduino.\nLa page Web hébergée par le serveur Web Arduino permet à une LED d&#039;être contrôlée par une case à cocher et à l&#039;autre par un bouton HTML sur la page Web.\nLes deux mêmes DEL sont également contrôlées par deux boutons-poussoirs. Lorsqu&#039;une LED est allumée ou éteinte à partir de la page Web, son état est visible dans la case à cocher ou dans le texte du bouton.\nLa case à cocher et le texte du bouton sont également mis à jour si vous appuyez sur les boutons physiques pour allumer ou éteindre les voyants. Ajax est utilisé sur la page Web afin que les mises à jour de cette page soient exemptes de tout scintillement.\nLa vidéo ci-dessous montre le circuit exploité à partir du navigateur Web sur un téléphone Android connecté au réseau via WiFi. Un navigateur sur un PC connecté au réseau via WiFi ou par câble fonctionnera également.\nLe schéma de circuit\nLes connexions des boutons-poussoirs et des voyants sont indiquées dans le schéma de circuit ci-dessous.\n\t\nArduino Web Server Switch et connexions LED\nLe matériel se compose de deux boutons-poussoirs tactiles momentanés et de deux voyants connectés à l’Arduino avec Ethernet Shield. Les commutateurs ont des résistances de 10kΩ chacune et les LED ont des résistances de limitation de courant de 470Ω.\nCode Arduino et page HTML\nTéléchargez le code compressé ici ou copiez et collez ci-dessous.\nEsquisse Arduino et page HTML compressée: web_server_hw_button_pg_button.zip (4.8kB)\nArduino Sketch\nL&#039;esquisse Arduino consiste en une version modifiée du code de la partie 16 du tutoriel du serveur Web Arduino sur le serveur Web Ajax I / O.</p>"},{"id":"text-2","type":"text","heading":"","plain_text":"/ * ---------------------------------------------------- --------------\n  Programme: web_server_hw_button_pg_button","html":"<p>/ * ---------------------------------------------------- --------------\n  Programme: web_server_hw_button_pg_button</p>"},{"id":"text-3","type":"text","heading":"","plain_text":"Description: serveur Web Arduino permettant à deux voyants\n                contrôlée par une case à cocher, un bouton HTML et deux\n                boutons-poussoirs matériels.\n                La page Web est stockée sur la carte micro SD.\n  \n  Matériel: Arduino Uno et Arduino Ethernet officiel\n                bouclier. Devrait fonctionner avec d’autres Arduinos et\n                boucliers Ethernet compatibles.\n                Carte micro SD de 2 Go formatée FAT16.\n                LED sur les broches 6 et 7.\n                Active les broches 2 et 3.\n                \n  Logiciel: développé à l&#39;aide du logiciel Arduino 1.6.1\n                Devrait être compatible avec Arduino 1.0 +\n                La carte SD contient une page Web appelée index.htm\n  \n  Références: - Basé sur l&#39;exemple Ajax I / O de Starting\n                  Électronique:\n                  http://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/SD-card-IO/\n                  \n                - Basculer le mode anti-rebond à partir du code exemple Arduino IDE\n                  Fichier -&gt; Exemples -&gt; 02.Digital -&gt; Debounce\n                  http://www.arduino.cc/en/Tutorial/Debounce","html":"<p>Description: serveur Web Arduino permettant à deux voyants\n                contrôlée par une case à cocher, un bouton HTML et deux\n                boutons-poussoirs matériels.\n                La page Web est stockée sur la carte micro SD.\n  \n  Matériel: Arduino Uno et Arduino Ethernet officiel\n                bouclier. Devrait fonctionner avec d’autres Arduinos et\n                boucliers Ethernet compatibles.\n                Carte micro SD de 2 Go formatée FAT16.\n                LED sur les broches 6 et 7.\n                Active les broches 2 et 3.\n                \n  Logiciel: développé à l&#039;aide du logiciel Arduino 1.6.1\n                Devrait être compatible avec Arduino 1.0 +\n                La carte SD contient une page Web appelée index.htm\n  \n  Références: - Basé sur l&#039;exemple Ajax I / O de Starting\n                  Électronique:\n                  http://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/SD-card-IO/\n                  \n                - Basculer le mode anti-rebond à partir du code exemple Arduino IDE\n                  Fichier -&gt; Exemples -&gt; 02.Digital -&gt; Debounce\n                  http://www.arduino.cc/en/Tutorial/Debounce</p>"},{"id":"text-4","type":"text","heading":"","plain_text":"Date: 13 avril 2015\n \n  Auteur: W.A. Smith, http://startingelectronics.org\n-------------------------------------------------- ------------ * /","html":"<p>Date: 13 avril 2015\n \n  Auteur: W.A. Smith, http://startingelectronics.org\n-------------------------------------------------- ------------ * /</p>"},{"id":"text-5","type":"text","heading":"","plain_text":"#include &lt;SPI.h&gt;\n#include &lt;Ethernet.h&gt;\n#include &lt;Dakota du Sud.h&gt;\n// taille de la mémoire tampon utilisée pour capturer les requêtes HTTP\n#define REQ_BUF_SZ 60","html":"<p>#include &lt;SPI.h&gt;\n#include &lt;Ethernet.h&gt;\n#include &lt;Dakota du Sud.h&gt;\n// taille de la mémoire tampon utilisée pour capturer les requêtes HTTP\n#define REQ_BUF_SZ 60</p>"},{"id":"text-6","type":"text","heading":"","plain_text":"// adresse MAC de l&#39;autocollant du bouclier Ethernet sous la carte\noctet Mac[] = 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED;\nAdresse IP ip (192, 168, 0, 20); // adresse IP, il peut être nécessaire de changer en fonction du réseau\nEthernetServer serveur (80);  // crée un serveur sur le port 80\nFichier webFile;               // le fichier de page Web sur la carte SD\ncarboniser HTTP_req[REQ_BUF_SZ] = 0; // requête HTTP en mémoire tampon stockée sous forme de chaîne terminée par un caractère null\ncarboniser req_index = 0;              // index dans le tampon HTTP_req\nbooléen LED_state[2] = 0; // stocke les états des LED","html":"<p>// adresse MAC de l&#039;autocollant du bouclier Ethernet sous la carte\noctet Mac[] = 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED;\nAdresse IP ip (192, 168, 0, 20); // adresse IP, il peut être nécessaire de changer en fonction du réseau\nEthernetServer serveur (80);  // crée un serveur sur le port 80\nFichier webFile;               // le fichier de page Web sur la carte SD\ncarboniser HTTP_req[REQ_BUF_SZ] = 0; // requête HTTP en mémoire tampon stockée sous forme de chaîne terminée par un caractère null\ncarboniser req_index = 0;              // index dans le tampon HTTP_req\nbooléen LED_state[2] = 0; // stocke les états des LED</p>"},{"id":"text-7","type":"text","heading":"","plain_text":"vide installer()","html":"<p>vide installer()</p>"},{"id":"text-8","type":"text","heading":"","plain_text":"// désactiver la puce Ethernet\n    pinMode(dix, SORTIE)\n    digitalWrite(dix, HAUTE)\n    \n    En série.commencer(9600);       // pour le débogage\n    \n    // initialise la carte SD\n    En série.imprimer(&quot;Initialisation de la carte SD ...&quot;)\n    si (!Dakota du Sud.commencer(4)) \n        En série.imprimer(&quot;ERREUR - L&#39;initialisation de la carte SD a échoué!&quot;)\n        revenir;    // l&#39;initialisation a échoué\n    \n    En série.imprimer(&quot;SUCCESS - Carte SD initialisée.&quot;)\n    // vérifier le fichier index.htm\n    si (!Dakota du Sud.existe(&quot;index.htm&quot;)) \n        En série.imprimer(&quot;ERREUR - Impossible de trouver le fichier index.htm!&quot;)\n        revenir;  // impossible de trouver le fichier d&#39;index\n    \n    En série.imprimer(&quot;SUCCESS - Fichier index.htm trouvé.&quot;)\n    // commutateurs\n    pinMode(2, CONTRIBUTION)\n    pinMode(3, CONTRIBUTION)\n    // LED\n    pinMode(6, SORTIE)\n    pinMode(sept, SORTIE)\n    \n    Ethernet.commencer(mac, ip);  // initialise le périphérique Ethernet\n    serveur.commencer();           // commence à écouter les clients","html":"<p>// désactiver la puce Ethernet\n    pinMode(dix, SORTIE)\n    digitalWrite(dix, HAUTE)\n    \n    En série.commencer(9600);       // pour le débogage\n    \n    // initialise la carte SD\n    En série.imprimer(&quot;Initialisation de la carte SD ...&quot;)\n    si (!Dakota du Sud.commencer(4)) \n        En série.imprimer(&quot;ERREUR - L&#039;initialisation de la carte SD a échoué!&quot;)\n        revenir;    // l&#039;initialisation a échoué\n    \n    En série.imprimer(&quot;SUCCESS - Carte SD initialisée.&quot;)\n    // vérifier le fichier index.htm\n    si (!Dakota du Sud.existe(&quot;index.htm&quot;)) \n        En série.imprimer(&quot;ERREUR - Impossible de trouver le fichier index.htm!&quot;)\n        revenir;  // impossible de trouver le fichier d&#039;index\n    \n    En série.imprimer(&quot;SUCCESS - Fichier index.htm trouvé.&quot;)\n    // commutateurs\n    pinMode(2, CONTRIBUTION)\n    pinMode(3, CONTRIBUTION)\n    // LED\n    pinMode(6, SORTIE)\n    pinMode(sept, SORTIE)\n    \n    Ethernet.commencer(mac, ip);  // initialise le périphérique Ethernet\n    serveur.commencer();           // commence à écouter les clients</p>"},{"id":"text-9","type":"text","heading":"","plain_text":"vide boucle()\n{\n    EthernetClient client = serveur.disponible();  // essaie d&#39;obtenir un client","html":"<p>vide boucle()\n{\n    EthernetClient client = serveur.disponible();  // essaie d&#039;obtenir un client</p>"},{"id":"text-10","type":"text","heading":"","plain_text":"si (client) {  // client obtenu?\n        booléen currentLineIsBlank = vrai;\n        tandis que (client.lié()) {\n            si (client.disponible()) {   // données client disponibles à lire\n                carboniser c = client.lis(); // lit 1 octet (caractère) du client\n                // limite la taille de la requête HTTP reçue stockée\n                // tampon la première partie de la requête HTTP dans un tableau HTTP_req (chaîne)\n                // laisse le dernier élément du tableau sous la forme 0 à une chaîne de terminaison nulle (REQ_BUF_SZ - 1)\n                si (req_index &lt;(REQ_BUF_SZ - 1)) \nHTTP_req[req_index] = C;          // sauvegarde le caractère de la requête HTTP\n                    req_index ++;","html":"<p>si (client) {  // client obtenu?\n        booléen currentLineIsBlank = vrai;\n        tandis que (client.lié()) {\n            si (client.disponible()) {   // données client disponibles à lire\n                carboniser c = client.lis(); // lit 1 octet (caractère) du client\n                // limite la taille de la requête HTTP reçue stockée\n                // tampon la première partie de la requête HTTP dans un tableau HTTP_req (chaîne)\n                // laisse le dernier élément du tableau sous la forme 0 à une chaîne de terminaison nulle (REQ_BUF_SZ - 1)\n                si (req_index &lt;(REQ_BUF_SZ - 1)) \nHTTP_req[req_index] = C;          // sauvegarde le caractère de la requête HTTP\n                    req_index ++;</p>"},{"id":"text-11","type":"text","heading":"","plain_text":"// la dernière ligne de la demande du client est vide et se termine par  n\n                // répond au client seulement après la dernière ligne reçue\n                si (c == &#39; n&#39; &amp;&amp; currentLineIsBlank) \n                    // envoie un en-tête de réponse http standard\n                    client.imprimer(&quot;HTTP / 1.1 200 OK&quot;)\n                    // le reste de l&#39;en-tête suit ci-dessous, selon si\n                    // une page Web ou une page XML est demandée\n                    // demande Ajax - envoi d&#39;un fichier XML\n                    si (StrContains (HTTP_req, &quot;ajax_inputs&quot;)) \n                        // envoie le reste de l&#39;en-tête HTTP\n                        client.imprimer(&quot;Content-Type: text / xml&quot;)\nclient.imprimer(&quot;Connexion: garder en vie&quot;)\nclient.imprimer();\nSetLEDs ();\n                        // envoie un fichier XML contenant des états d&#39;entrée\n                        Réponse XML (client);","html":"<p>// la dernière ligne de la demande du client est vide et se termine par  n\n                // répond au client seulement après la dernière ligne reçue\n                si (c == &#039; n&#039; &amp;&amp; currentLineIsBlank) \n                    // envoie un en-tête de réponse http standard\n                    client.imprimer(&quot;HTTP / 1.1 200 OK&quot;)\n                    // le reste de l&#039;en-tête suit ci-dessous, selon si\n                    // une page Web ou une page XML est demandée\n                    // demande Ajax - envoi d&#039;un fichier XML\n                    si (StrContains (HTTP_req, &quot;ajax_inputs&quot;)) \n                        // envoie le reste de l&#039;en-tête HTTP\n                        client.imprimer(&quot;Content-Type: text / xml&quot;)\nclient.imprimer(&quot;Connexion: garder en vie&quot;)\nclient.imprimer();\nSetLEDs ();\n                        // envoie un fichier XML contenant des états d&#039;entrée\n                        Réponse XML (client);</p>"},{"id":"text-12","type":"text","heading":"","plain_text":"autre   // demande de page Web\n                        // envoie le reste de l&#39;en-tête HTTP\n                        client.imprimer(&quot;Content-Type: text / html&quot;)\nclient.imprimer(&quot;Connexion: garder en vie&quot;)\nclient.imprimer();\n                        // envoyer une page Web\n                        webFile = Dakota du Sud.ouvert(&quot;index.htm&quot;)        // ouvrir un fichier de page Web\n                        si (webFile) \n                            tandis que(webFile.disponible()) \nclient.écrire(webFile.lis()); // envoyer une page Web au client\n                            \nwebFile.proche();","html":"<p>autre   // demande de page Web\n                        // envoie le reste de l&#039;en-tête HTTP\n                        client.imprimer(&quot;Content-Type: text / html&quot;)\nclient.imprimer(&quot;Connexion: garder en vie&quot;)\nclient.imprimer();\n                        // envoyer une page Web\n                        webFile = Dakota du Sud.ouvert(&quot;index.htm&quot;)        // ouvrir un fichier de page Web\n                        si (webFile) \n                            tandis que(webFile.disponible()) \nclient.écrire(webFile.lis()); // envoyer une page Web au client\n                            \nwebFile.proche();</p>"},{"id":"text-13","type":"text","heading":"","plain_text":"// affiche la requête HTTP reçue sur le port série\n                    En série.impression(HTTP_req);\n                    // réinitialise l&#39;index du tampon et tous les éléments du tampon à 0\n                    req_index = 0;\nStrClear (HTTP_req, REQ_BUF_SZ);\n                    Pause;","html":"<p>// affiche la requête HTTP reçue sur le port série\n                    En série.impression(HTTP_req);\n                    // réinitialise l&#039;index du tampon et tous les éléments du tampon à 0\n                    req_index = 0;\nStrClear (HTTP_req, REQ_BUF_SZ);\n                    Pause;</p>"},{"id":"text-14","type":"text","heading":"","plain_text":"// chaque ligne de texte reçue du client se termine par  r  n\n                si (c == &#39; n&#39;) \n                    // dernier caractère sur la ligne du texte reçu\n                    // commence une nouvelle ligne avec le caractère suivant lu\n                    currentLineIsBlank = vrai;\n \n                autre si (c! = &#39; r&#39;) \n                    // un caractère de texte a été reçu du client\n                    currentLineIsBlank = faux;","html":"<p>// chaque ligne de texte reçue du client se termine par  r  n\n                si (c == &#039; n&#039;) \n                    // dernier caractère sur la ligne du texte reçu\n                    // commence une nouvelle ligne avec le caractère suivant lu\n                    currentLineIsBlank = vrai;\n \n                autre si (c! = &#039; r&#039;) \n                    // un caractère de texte a été reçu du client\n                    currentLineIsBlank = faux;</p>"},{"id":"text-15","type":"text","heading":"","plain_text":"} // fin si (client.available ())\n        } // fin tout le temps (client.connected ())\n        retard(1);      // donne le temps au navigateur Web pour recevoir les données\n        client.Arrêtez(); // ferme la connexion\n    } // fin si (client)\n    \n    // lire les boutons et les rebonds\n    ButtonDebounce ();\n}","html":"<p>} // fin si (client.available ())\n        } // fin tout le temps (client.connected ())\n        retard(1);      // donne le temps au navigateur Web pour recevoir les données\n        client.Arrêtez(); // ferme la connexion\n    } // fin si (client)\n    \n    // lire les boutons et les rebonds\n    ButtonDebounce ();\n}</p>"},{"id":"text-16","type":"text","heading":"","plain_text":"// la fonction lit les états des commutateurs à bouton-poussoir, les affiche et verrouille les états des voyants\n// bascule les états des voyants à chaque cycle push-release\n// codé en dur pour faire rebondir deux commutateurs sur les broches 2 et 3; et deux LED sur les broches 6 et 7\n// fonction adaptée de l&#39;exemple intégré Arduino IDE:\n// Fichier -&gt; Exemples -&gt; 02.Digital -&gt; Debounce\nvide ButtonDebounce (vide)\n{\n    statique octet buttonState[2]     = FAIBLE, FAIBLE;   // la lecture actuelle de la broche d&#39;entrée\n    statique octet lastButtonState[2] = FAIBLE, FAIBLE;   // la lecture précédente de la broche d&#39;entrée\n    \n    // les variables suivantes sont longues car le temps, mesuré en millisecondes,\n    // deviendra rapidement un nombre plus grand que ce qui peut être stocké dans un int.\n    statique longue lastDebounceTime[2] = 0;  // la dernière fois que la broche de sortie a été basculée\n    longue debounceDelay = 50;         // le temps de rebond; augmenter si la sortie scintille\n  \n    octet en train de lire[2];","html":"<p>// la fonction lit les états des commutateurs à bouton-poussoir, les affiche et verrouille les états des voyants\n// bascule les états des voyants à chaque cycle push-release\n// codé en dur pour faire rebondir deux commutateurs sur les broches 2 et 3; et deux LED sur les broches 6 et 7\n// fonction adaptée de l&#039;exemple intégré Arduino IDE:\n// Fichier -&gt; Exemples -&gt; 02.Digital -&gt; Debounce\nvide ButtonDebounce (vide)\n{\n    statique octet buttonState[2]     = FAIBLE, FAIBLE;   // la lecture actuelle de la broche d&#039;entrée\n    statique octet lastButtonState[2] = FAIBLE, FAIBLE;   // la lecture précédente de la broche d&#039;entrée\n    \n    // les variables suivantes sont longues car le temps, mesuré en millisecondes,\n    // deviendra rapidement un nombre plus grand que ce qui peut être stocké dans un int.\n    statique longue lastDebounceTime[2] = 0;  // la dernière fois que la broche de sortie a été basculée\n    longue debounceDelay = 50;         // le temps de rebond; augmenter si la sortie scintille\n  \n    octet en train de lire[2];</p>"},{"id":"text-17","type":"text","heading":"","plain_text":"en train de lire[0] = numériqueLire(2);\nen train de lire[1] = numériqueLire(3);\n    \n    pour (int i = 0; i &lt;2; i ++) \n        si (en train de lire[i] ! = lastButtonState[i]) \n            // réinitialiser le minuteur anti-rebond\n            lastDebounceTime[i] = millis();","html":"<p>en train de lire[0] = numériqueLire(2);\nen train de lire[1] = numériqueLire(3);\n    \n    pour (int i = 0; i &lt;2; i ++) \n        si (en train de lire[i] ! = lastButtonState[i]) \n            // réinitialiser le minuteur anti-rebond\n            lastDebounceTime[i] = millis();</p>"},{"id":"text-18","type":"text","heading":"","plain_text":"si ((millis() - lastDebounceTime[i])&gt; debounceDelay) \n            // peu importe la lecture, ça fait plus longtemps\n            // que le délai anti-rebond, considérons-le comme l&#39;état actuel:\n        \n            // si l&#39;état du bouton a changé:\n            si (en train de lire[i] ! = buttonState[i]) \nbuttonState[i] = Lecture[i];\n          \n                // n&#39;inclue la LED que si le nouvel état du bouton est HIGH\n                si (buttonState[i] == HAUTE) \nLED_state[i] =! LED_state[i];","html":"<p>si ((millis() - lastDebounceTime[i])&gt; debounceDelay) \n            // peu importe la lecture, ça fait plus longtemps\n            // que le délai anti-rebond, considérons-le comme l&#039;état actuel:\n        \n            // si l&#039;état du bouton a changé:\n            si (en train de lire[i] ! = buttonState[i]) \nbuttonState[i] = Lecture[i];\n          \n                // n&#039;inclue la LED que si le nouvel état du bouton est HIGH\n                si (buttonState[i] == HAUTE) \nLED_state[i] =! LED_state[i];</p>"},{"id":"text-19","type":"text","heading":"","plain_text":"// fin de la boucle ()\n    \n    // régler les voyants\n    digitalWrite(6, LED_state[0])\n    digitalWrite(7, LED_state[1])\n      \n    // sauvegarde la lecture. La prochaine fois dans la boucle,\n    // ce sera le lastButtonState:\n    lastButtonState[0] = Lecture[0];\nlastButtonState[1] = Lecture[1];\n}","html":"<p>// fin de la boucle ()\n    \n    // régler les voyants\n    digitalWrite(6, LED_state[0])\n    digitalWrite(7, LED_state[1])\n      \n    // sauvegarde la lecture. La prochaine fois dans la boucle,\n    // ce sera le lastButtonState:\n    lastButtonState[0] = Lecture[0];\nlastButtonState[1] = Lecture[1];\n}</p>"},{"id":"text-20","type":"text","heading":"","plain_text":"// vérifie si la requête HTTP reçue allume / éteint les voyants\n// enregistre également l&#39;état des voyants\nvide SetLEDs (vide)","html":"<p>// vérifie si la requête HTTP reçue allume / éteint les voyants\n// enregistre également l&#039;état des voyants\nvide SetLEDs (vide)</p>"},{"id":"text-21","type":"text","heading":"","plain_text":"// LED 1 (broche 6)\n    si (StrContains (HTTP_req, &quot;LED1 = 1&quot;)) \nLED_state[0] = 1;  // enregistrer l&#39;état de la LED\n        digitalWrite(6, HAUTE)","html":"<p>// LED 1 (broche 6)\n    si (StrContains (HTTP_req, &quot;LED1 = 1&quot;)) \nLED_state[0] = 1;  // enregistrer l&#039;état de la LED\n        digitalWrite(6, HAUTE)</p>"},{"id":"text-22","type":"text","heading":"","plain_text":"autre si (StrContains (HTTP_req, &quot;LED1 = 0&quot;)) \nLED_state[0] = 0;  // enregistrer l&#39;état de la LED\n        digitalWrite(6, FAIBLE)","html":"<p>autre si (StrContains (HTTP_req, &quot;LED1 = 0&quot;)) \nLED_state[0] = 0;  // enregistrer l&#039;état de la LED\n        digitalWrite(6, FAIBLE)</p>"},{"id":"text-23","type":"text","heading":"","plain_text":"// LED 2 (broche 7)\n    si (StrContains (HTTP_req, &quot;LED2 = 1&quot;)) \nLED_state[1] = 1;  // enregistrer l&#39;état de la LED\n        digitalWrite(sept, HAUTE)","html":"<p>// LED 2 (broche 7)\n    si (StrContains (HTTP_req, &quot;LED2 = 1&quot;)) \nLED_state[1] = 1;  // enregistrer l&#039;état de la LED\n        digitalWrite(sept, HAUTE)</p>"},{"id":"text-24","type":"text","heading":"","plain_text":"autre si (StrContains (HTTP_req, &quot;LED2 = 0&quot;)) \nLED_state[1] = 0;  // enregistrer l&#39;état de la LED\n        digitalWrite(sept, FAIBLE)","html":"<p>autre si (StrContains (HTTP_req, &quot;LED2 = 0&quot;)) \nLED_state[1] = 0;  // enregistrer l&#039;état de la LED\n        digitalWrite(sept, FAIBLE)</p>"},{"id":"text-25","type":"text","heading":"","plain_text":"// envoie le fichier XML avec des valeurs analogiques, changez le statut\n// et statut de la LED\nvide XML_response (EthernetClient cl)","html":"<p>// envoie le fichier XML avec des valeurs analogiques, changez le statut\n// et statut de la LED\nvide XML_response (EthernetClient cl)</p>"},{"id":"text-26","type":"text","heading":"","plain_text":"int analog_val;            // stocke la valeur lue des entrées analogiques\n    int compter;                 // utilisé par les boucles &#39;pour&#39;\n    int sw_arr[] = 2, 3;  // broches interfacées avec des commutateurs\n    \n    cl.impression(&quot;&quot;)\ncl.impression(&quot;&quot;)\n    // Etat de la case à cocher\n    // LED1\n    cl.impression(&quot;&quot;)\n    si (LED_state[0]) \ncl.impression(&quot;vérifié&quot;)","html":"<p>int analog_val;            // stocke la valeur lue des entrées analogiques\n    int compter;                 // utilisé par les boucles &#039;pour&#039;\n    int sw_arr[] = 2, 3;  // broches interfacées avec des commutateurs\n    \n    cl.impression(&quot;&quot;)\ncl.impression(&quot;&quot;)\n    // Etat de la case à cocher\n    // LED1\n    cl.impression(&quot;&quot;)\n    si (LED_state[0]) \ncl.impression(&quot;vérifié&quot;)</p>"},{"id":"text-27","type":"text","heading":"","plain_text":"autre \ncl.impression(&quot;décoché&quot;)","html":"<p>autre \ncl.impression(&quot;décoché&quot;)</p>"},{"id":"text-28","type":"text","heading":"","plain_text":"cl.imprimer(&quot;&quot;)\n    // états de la LED du bouton\n    // LED3\n    cl.impression(&quot;&quot;)\n    si (LED_state[1]) \ncl.impression(&quot;sur&quot;)","html":"<p>cl.imprimer(&quot;&quot;)\n    // états de la LED du bouton\n    // LED3\n    cl.impression(&quot;&quot;)\n    si (LED_state[1]) \ncl.impression(&quot;sur&quot;)</p>"},{"id":"text-29","type":"text","heading":"","plain_text":"autre \ncl.impression(&quot;de&quot;)","html":"<p>autre \ncl.impression(&quot;de&quot;)</p>"},{"id":"text-30","type":"text","heading":"","plain_text":"cl.imprimer(&quot;&quot;)\ncl.impression(&quot;&quot;)","html":"<p>cl.imprimer(&quot;&quot;)\ncl.impression(&quot;&quot;)</p>"},{"id":"text-31","type":"text","heading":"","plain_text":"// met tous les éléments de str à 0 (efface le tableau)\nvide StrClear (carboniser * str, carboniser longueur)","html":"<p>// met tous les éléments de str à 0 (efface le tableau)\nvide StrClear (carboniser * str, carboniser longueur)</p>"},{"id":"text-32","type":"text","heading":"","plain_text":"pour (int i = 0; je &lt; longueur; i ++) \nstr[i] = 0;","html":"<p>pour (int i = 0; je &lt; longueur; i ++) \nstr[i] = 0;</p>"},{"id":"text-33","type":"text","heading":"","plain_text":"// recherche la chaîne sfind dans la chaîne str\n// retourne 1 si une chaîne est trouvée\n// retourne 0 si la chaîne est introuvable\ncarboniser StrContains (carboniser * str, carboniser * sfind)","html":"<p>// recherche la chaîne sfind dans la chaîne str\n// retourne 1 si une chaîne est trouvée\n// retourne 0 si la chaîne est introuvable\ncarboniser StrContains (carboniser * str, carboniser * sfind)</p>"},{"id":"text-34","type":"text","heading":"","plain_text":"carboniser trouvé = 0;\n    carboniser indice = 0;\n    carboniser len;","html":"<p>carboniser trouvé = 0;\n    carboniser indice = 0;\n    carboniser len;</p>"},{"id":"text-35","type":"text","heading":"","plain_text":"len = strlen (str);\n    \n    si (strlen (sfind)&gt; len) \n        revenir 0;","html":"<p>len = strlen (str);\n    \n    si (strlen (sfind)&gt; len) \n        revenir 0;</p>"},{"id":"text-36","type":"text","heading":"","plain_text":"tandis que (index &lt;len) \n        si (str[index] == sfind[found]) \ntrouvé ++;\n            si (strlen (sfind) == trouvé) \n                revenir 1;","html":"<p>tandis que (index &lt;len) \n        si (str[index] == sfind[found]) \ntrouvé ++;\n            si (strlen (sfind) == trouvé) \n                revenir 1;</p>"},{"id":"text-37","type":"text","heading":"","plain_text":"autre \ntrouvé = 0;","html":"<p>autre \ntrouvé = 0;</p>"},{"id":"text-38","type":"text","heading":"","plain_text":"index ++;","html":"<p>index ++;</p>"},{"id":"text-39","type":"text","heading":"","plain_text":"revenir 0;","html":"<p>revenir 0;</p>"},{"id":"text-40","type":"text","heading":"","plain_text":"Page HTML avec CSS et JavaScript intégrés\nLe code ci-dessous doit être copié dans un fichier appelé index.htm et le fichier index.htm doit être copié sur une carte micro SD à insérer dans la fente pour carte du bouclier Arduino.\nLe code HTML avec CSS et JavaScript incorporés consiste en une version modifiée du code de la partie 16 du tutoriel du serveur Web Arduino sur le serveur Web Ajax I / O.","html":"<p>Page HTML avec CSS et JavaScript intégrés\nLe code ci-dessous doit être copié dans un fichier appelé index.htm et le fichier index.htm doit être copié sur une carte micro SD à insérer dans la fente pour carte du bouclier Arduino.\nLe code HTML avec CSS et JavaScript incorporés consiste en une version modifiée du code de la partie 16 du tutoriel du serveur Web Arduino sur le serveur Web Ajax I / O.</p>"},{"id":"text-41","type":"text","heading":"","plain_text":"Arduino Ajax LED Button Control\n        \n    \n    \n    \n        Arduino Ajax LED Button Control\n        \n            LED utilisant la case à cocher\n            \n                LED 1 (D6)\n            \n        \n        \n            LED utilisant le bouton\n            La LED 2 est éteinte (D7)","html":"<p>Arduino Ajax LED Button Control\n        \n    \n    \n    \n        Arduino Ajax LED Button Control\n        \n            LED utilisant la case à cocher\n            \n                LED 1 (D6)\n            \n        \n        \n            LED utilisant le bouton\n            La LED 2 est éteinte (D7)</p>"},{"id":"text-42","type":"text","heading":"","plain_text":"Comment fonctionne le code\nLe code Arduino et la page HTML ont été copiés à partir de la partie 16 du didacticiel du serveur Web Arduino et modifiés.\nLe code a été nettoyé\nTous les codes inutiles pour les entrées analogiques, les cases à cocher et les boutons supplémentaires ont été supprimés des codes HTML, JavaScript et Arduino. Le code qui contrôle le voyant 2 a été modifié pour utiliser un bouton HTML.\nÀ ce stade, les deux voyants peuvent être contrôlés à l&#39;aide d&#39;une case à cocher sur la page Web hébergée sur Arduino pour le premier voyant et d&#39;un bouton sur la page HTML pour le deuxième voyant.\nAjout du code de contrôle du bouton physique\nRien de plus ne devait être modifié dans le code HTML / JavaScript pour les commutateurs matériels car les états des voyants étaient déjà renvoyés à la page Web à l&#39;aide de Ajax. L&#39;ajout de deux boutons poussoirs physiques pour contrôler les voyants mettrait à jour les états mémorisés des voyants dans l&#39;Arduino, qui seraient ensuite envoyés à la page Web lors de la prochaine demande Ajax.\nBasculer le rebondissement et le verrouillage\nLes boutons-poussoirs momentanés ne se verrouillent pas. En appuyant sur le bouton, vous fermez le circuit. Relâchez le bouton. Le circuit s&#39;ouvre à nouveau. Les contacts ne restent jamais fermés, mais restent ouverts lorsque le bouton est relâché.\nLes boutons, commutateurs et relais ont tous un rebond de contact. C’est-à-dire que lorsque les contacts du commutateur sont fermés, ils ne se ferment pas proprement et restent fermés, mais rebondissent plutôt pendant un court laps de temps.\nPar rebond, nous voulons dire qu’ils se ferment initialement, puis rebondissent, puis se referment, puis s’ouvrent et se referment plusieurs fois avant de s’installer. Ce rebond ne sera pas perçu si le commutateur est utilisé dans un circuit qui allume directement une lumière, mais sera détecté par un microcontrôleur fonctionnant à plusieurs mégahertz.\nLes commutateurs peuvent être &quot;traités&quot; à l&#39;aide d&#39;un logiciel qui attend que les contacts du commutateur soient réglés.\nIl existe déjà quelques logiciels dans les exemples intégrés Arduino IDE qui permettent de transformer un commutateur à bouton-poussoir momentané en un commutateur à verrouillage et de supprimer simultanément les contacts du commutateur.\nL&#39;exemple peut être trouvé dans le menu Arduino IDE: Fichier → Exemples → 02. Numérique → Debounce\nLorsque cet exemple de code est chargé sur l’Arduino, appuyez et relâchez une fois le commutateur à bouton-poussoir pour allumer un voyant. Appuyer et relâcher une seconde fois le bouton-poussoir éteint la DEL.\nDans le code Arduino de ce projet, l’IDE ​​Arduino Debounce exemple de code est utilisé dans la fonction ButtonDebounce () faire rebondir et verrouiller les deux boutons-poussoirs et basculer les états des voyants.\nLe code est modifié pour gérer deux boutons poussoirs et deux voyants en convertissant les variables du code en tableaux bidimensionnels et en utilisant un élément du tableau par paire de boutons poussoirs / voyants.\nMise à jour des états des voyants sur la page Web\nLe tableau LED_state[]  conserve les états actuels des deux voyants et est modifié par le ButtonDebounce () une fonction. Ce même tableau est également modifié par la case à cocher et le bouton HTML de la page Web dans la SetLEDs () une fonction.\nLorsque vous appuyez sur un bouton physique ou que vous cliquez sur la case à cocher ou le bouton HTML sur la page Web, l’état de la DEL est mis à jour dans LED_state[]  tableau.\nLa prochaine fois que la page Web effectue une demande Ajax, le voyant indique LED_state[]  sont utilisés pour mettre à jour le fichier XML qui est renvoyé à la page Web lorsque le XML_response () la fonction est appelée.\nCeci met à jour la case à cocher pour cocher ou décocher et le texte du bouton HTML pour ON ou OFF.","html":"<p>Comment fonctionne le code\nLe code Arduino et la page HTML ont été copiés à partir de la partie 16 du didacticiel du serveur Web Arduino et modifiés.\nLe code a été nettoyé\nTous les codes inutiles pour les entrées analogiques, les cases à cocher et les boutons supplémentaires ont été supprimés des codes HTML, JavaScript et Arduino. Le code qui contrôle le voyant 2 a été modifié pour utiliser un bouton HTML.\nÀ ce stade, les deux voyants peuvent être contrôlés à l&#039;aide d&#039;une case à cocher sur la page Web hébergée sur Arduino pour le premier voyant et d&#039;un bouton sur la page HTML pour le deuxième voyant.\nAjout du code de contrôle du bouton physique\nRien de plus ne devait être modifié dans le code HTML / JavaScript pour les commutateurs matériels car les états des voyants étaient déjà renvoyés à la page Web à l&#039;aide de Ajax. L&#039;ajout de deux boutons poussoirs physiques pour contrôler les voyants mettrait à jour les états mémorisés des voyants dans l&#039;Arduino, qui seraient ensuite envoyés à la page Web lors de la prochaine demande Ajax.\nBasculer le rebondissement et le verrouillage\nLes boutons-poussoirs momentanés ne se verrouillent pas. En appuyant sur le bouton, vous fermez le circuit. Relâchez le bouton. Le circuit s&#039;ouvre à nouveau. Les contacts ne restent jamais fermés, mais restent ouverts lorsque le bouton est relâché.\nLes boutons, commutateurs et relais ont tous un rebond de contact. C’est-à-dire que lorsque les contacts du commutateur sont fermés, ils ne se ferment pas proprement et restent fermés, mais rebondissent plutôt pendant un court laps de temps.\nPar rebond, nous voulons dire qu’ils se ferment initialement, puis rebondissent, puis se referment, puis s’ouvrent et se referment plusieurs fois avant de s’installer. Ce rebond ne sera pas perçu si le commutateur est utilisé dans un circuit qui allume directement une lumière, mais sera détecté par un microcontrôleur fonctionnant à plusieurs mégahertz.\nLes commutateurs peuvent être &quot;traités&quot; à l&#039;aide d&#039;un logiciel qui attend que les contacts du commutateur soient réglés.\nIl existe déjà quelques logiciels dans les exemples intégrés Arduino IDE qui permettent de transformer un commutateur à bouton-poussoir momentané en un commutateur à verrouillage et de supprimer simultanément les contacts du commutateur.\nL&#039;exemple peut être trouvé dans le menu Arduino IDE: Fichier → Exemples → 02. Numérique → Debounce\nLorsque cet exemple de code est chargé sur l’Arduino, appuyez et relâchez une fois le commutateur à bouton-poussoir pour allumer un voyant. Appuyer et relâcher une seconde fois le bouton-poussoir éteint la DEL.\nDans le code Arduino de ce projet, l’IDE ​​Arduino Debounce exemple de code est utilisé dans la fonction ButtonDebounce () faire rebondir et verrouiller les deux boutons-poussoirs et basculer les états des voyants.\nLe code est modifié pour gérer deux boutons poussoirs et deux voyants en convertissant les variables du code en tableaux bidimensionnels et en utilisant un élément du tableau par paire de boutons poussoirs / voyants.\nMise à jour des états des voyants sur la page Web\nLe tableau LED_state[]  conserve les états actuels des deux voyants et est modifié par le ButtonDebounce () une fonction. Ce même tableau est également modifié par la case à cocher et le bouton HTML de la page Web dans la SetLEDs () une fonction.\nLorsque vous appuyez sur un bouton physique ou que vous cliquez sur la case à cocher ou le bouton HTML sur la page Web, l’état de la DEL est mis à jour dans LED_state[]  tableau.\nLa prochaine fois que la page Web effectue une demande Ajax, le voyant indique LED_state[]  sont utilisés pour mettre à jour le fichier XML qui est renvoyé à la page Web lorsque le XML_response () la fonction est appelée.\nCeci met à jour la case à cocher pour cocher ou décocher et le texte du bouton HTML pour ON ou OFF.</p>"},{"id":"text-43","type":"text","heading":"","plain_text":"Veuillez activer JavaScript pour afficher les commentaires générés par Disqus.","html":"<p>Veuillez activer JavaScript pour afficher les commentaires générés par Disqus.</p>"},{"id":"text-44","type":"text","heading":"","plain_text":"Click to rate this post!\n                                   \n                               [Total: 0  Average: 0]","html":"<p>Click to rate this post!\n                                   \n                               [Total: 0  Average: 0]</p>"}],"sections":[{"id":"text-1","heading":"Text","content":"Créé le: 13 avril 2015\nCe projet de carte de visite Arduino utilise un blindage Arduino Uno et Arduino Ethernet avec une carte SD en tant que serveur Web. Deux boutons poussoirs et deux DEL sont connectés à l’Arduino.\nLa page Web hébergée par le serveur Web Arduino permet à une LED d&#39;être contrôlée par une case à cocher et à l&#39;autre par un bouton HTML sur la page Web.\nLes deux mêmes DEL sont également contrôlées par deux boutons-poussoirs. Lorsqu&#39;une LED est allumée ou éteinte à partir de la page Web, son état est visible dans la case à cocher ou dans le texte du bouton.\nLa case à cocher et le texte du bouton sont également mis à jour si vous appuyez sur les boutons physiques pour allumer ou éteindre les voyants. Ajax est utilisé sur la page Web afin que les mises à jour de cette page soient exemptes de tout scintillement.\nLa vidéo ci-dessous montre le circuit exploité à partir du navigateur Web sur un téléphone Android connecté au réseau via WiFi. Un navigateur sur un PC connecté au réseau via WiFi ou par câble fonctionnera également.\nLe schéma de circuit\nLes connexions des boutons-poussoirs et des voyants sont indiquées dans le schéma de circuit ci-dessous.\n\t\nArduino Web Server Switch et connexions LED\nLe matériel se compose de deux boutons-poussoirs tactiles momentanés et de deux voyants connectés à l’Arduino avec Ethernet Shield. Les commutateurs ont des résistances de 10kΩ chacune et les LED ont des résistances de limitation de courant de 470Ω.\nCode Arduino et page HTML\nTéléchargez le code compressé ici ou copiez et collez ci-dessous.\nEsquisse Arduino et page HTML compressée: web_server_hw_button_pg_button.zip (4.8kB)\nArduino Sketch\nL&#39;esquisse Arduino consiste en une version modifiée du code de la partie 16 du tutoriel du serveur Web Arduino sur le serveur Web Ajax I / O."},{"id":"text-2","heading":"Text","content":"/ * ---------------------------------------------------- --------------\n  Programme: web_server_hw_button_pg_button"},{"id":"text-3","heading":"Text","content":"Description: serveur Web Arduino permettant à deux voyants\n                contrôlée par une case à cocher, un bouton HTML et deux\n                boutons-poussoirs matériels.\n                La page Web est stockée sur la carte micro SD.\n  \n  Matériel: Arduino Uno et Arduino Ethernet officiel\n                bouclier. Devrait fonctionner avec d’autres Arduinos et\n                boucliers Ethernet compatibles.\n                Carte micro SD de 2 Go formatée FAT16.\n                LED sur les broches 6 et 7.\n                Active les broches 2 et 3.\n                \n  Logiciel: développé à l&#39;aide du logiciel Arduino 1.6.1\n                Devrait être compatible avec Arduino 1.0 +\n                La carte SD contient une page Web appelée index.htm\n  \n  Références: - Basé sur l&#39;exemple Ajax I / O de Starting\n                  Électronique:\n                  http://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/SD-card-IO/\n                  \n                - Basculer le mode anti-rebond à partir du code exemple Arduino IDE\n                  Fichier -&gt; Exemples -&gt; 02.Digital -&gt; Debounce\n                  http://www.arduino.cc/en/Tutorial/Debounce"},{"id":"text-4","heading":"Text","content":"Date: 13 avril 2015\n \n  Auteur: W.A. Smith, http://startingelectronics.org\n-------------------------------------------------- ------------ * /"},{"id":"text-5","heading":"Text","content":"#include &lt;SPI.h&gt;\n#include &lt;Ethernet.h&gt;\n#include &lt;Dakota du Sud.h&gt;\n// taille de la mémoire tampon utilisée pour capturer les requêtes HTTP\n#define REQ_BUF_SZ 60"},{"id":"text-6","heading":"Text","content":"// adresse MAC de l&#39;autocollant du bouclier Ethernet sous la carte\noctet Mac[] = 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED;\nAdresse IP ip (192, 168, 0, 20); // adresse IP, il peut être nécessaire de changer en fonction du réseau\nEthernetServer serveur (80);  // crée un serveur sur le port 80\nFichier webFile;               // le fichier de page Web sur la carte SD\ncarboniser HTTP_req[REQ_BUF_SZ] = 0; // requête HTTP en mémoire tampon stockée sous forme de chaîne terminée par un caractère null\ncarboniser req_index = 0;              // index dans le tampon HTTP_req\nbooléen LED_state[2] = 0; // stocke les états des LED"},{"id":"text-7","heading":"Text","content":"vide installer()"},{"id":"text-8","heading":"Text","content":"// désactiver la puce Ethernet\n    pinMode(dix, SORTIE)\n    digitalWrite(dix, HAUTE)\n    \n    En série.commencer(9600);       // pour le débogage\n    \n    // initialise la carte SD\n    En série.imprimer(&quot;Initialisation de la carte SD ...&quot;)\n    si (!Dakota du Sud.commencer(4)) \n        En série.imprimer(&quot;ERREUR - L&#39;initialisation de la carte SD a échoué!&quot;)\n        revenir;    // l&#39;initialisation a échoué\n    \n    En série.imprimer(&quot;SUCCESS - Carte SD initialisée.&quot;)\n    // vérifier le fichier index.htm\n    si (!Dakota du Sud.existe(&quot;index.htm&quot;)) \n        En série.imprimer(&quot;ERREUR - Impossible de trouver le fichier index.htm!&quot;)\n        revenir;  // impossible de trouver le fichier d&#39;index\n    \n    En série.imprimer(&quot;SUCCESS - Fichier index.htm trouvé.&quot;)\n    // commutateurs\n    pinMode(2, CONTRIBUTION)\n    pinMode(3, CONTRIBUTION)\n    // LED\n    pinMode(6, SORTIE)\n    pinMode(sept, SORTIE)\n    \n    Ethernet.commencer(mac, ip);  // initialise le périphérique Ethernet\n    serveur.commencer();           // commence à écouter les clients"},{"id":"text-9","heading":"Text","content":"vide boucle()\n{\n    EthernetClient client = serveur.disponible();  // essaie d&#39;obtenir un client"},{"id":"text-10","heading":"Text","content":"si (client) {  // client obtenu?\n        booléen currentLineIsBlank = vrai;\n        tandis que (client.lié()) {\n            si (client.disponible()) {   // données client disponibles à lire\n                carboniser c = client.lis(); // lit 1 octet (caractère) du client\n                // limite la taille de la requête HTTP reçue stockée\n                // tampon la première partie de la requête HTTP dans un tableau HTTP_req (chaîne)\n                // laisse le dernier élément du tableau sous la forme 0 à une chaîne de terminaison nulle (REQ_BUF_SZ - 1)\n                si (req_index &lt;(REQ_BUF_SZ - 1)) \nHTTP_req[req_index] = C;          // sauvegarde le caractère de la requête HTTP\n                    req_index ++;"},{"id":"text-11","heading":"Text","content":"// la dernière ligne de la demande du client est vide et se termine par  n\n                // répond au client seulement après la dernière ligne reçue\n                si (c == &#39; n&#39; &amp;&amp; currentLineIsBlank) \n                    // envoie un en-tête de réponse http standard\n                    client.imprimer(&quot;HTTP / 1.1 200 OK&quot;)\n                    // le reste de l&#39;en-tête suit ci-dessous, selon si\n                    // une page Web ou une page XML est demandée\n                    // demande Ajax - envoi d&#39;un fichier XML\n                    si (StrContains (HTTP_req, &quot;ajax_inputs&quot;)) \n                        // envoie le reste de l&#39;en-tête HTTP\n                        client.imprimer(&quot;Content-Type: text / xml&quot;)\nclient.imprimer(&quot;Connexion: garder en vie&quot;)\nclient.imprimer();\nSetLEDs ();\n                        // envoie un fichier XML contenant des états d&#39;entrée\n                        Réponse XML (client);"},{"id":"text-12","heading":"Text","content":"autre   // demande de page Web\n                        // envoie le reste de l&#39;en-tête HTTP\n                        client.imprimer(&quot;Content-Type: text / html&quot;)\nclient.imprimer(&quot;Connexion: garder en vie&quot;)\nclient.imprimer();\n                        // envoyer une page Web\n                        webFile = Dakota du Sud.ouvert(&quot;index.htm&quot;)        // ouvrir un fichier de page Web\n                        si (webFile) \n                            tandis que(webFile.disponible()) \nclient.écrire(webFile.lis()); // envoyer une page Web au client\n                            \nwebFile.proche();"},{"id":"text-13","heading":"Text","content":"// affiche la requête HTTP reçue sur le port série\n                    En série.impression(HTTP_req);\n                    // réinitialise l&#39;index du tampon et tous les éléments du tampon à 0\n                    req_index = 0;\nStrClear (HTTP_req, REQ_BUF_SZ);\n                    Pause;"},{"id":"text-14","heading":"Text","content":"// chaque ligne de texte reçue du client se termine par  r  n\n                si (c == &#39; n&#39;) \n                    // dernier caractère sur la ligne du texte reçu\n                    // commence une nouvelle ligne avec le caractère suivant lu\n                    currentLineIsBlank = vrai;\n \n                autre si (c! = &#39; r&#39;) \n                    // un caractère de texte a été reçu du client\n                    currentLineIsBlank = faux;"},{"id":"text-15","heading":"Text","content":"} // fin si (client.available ())\n        } // fin tout le temps (client.connected ())\n        retard(1);      // donne le temps au navigateur Web pour recevoir les données\n        client.Arrêtez(); // ferme la connexion\n    } // fin si (client)\n    \n    // lire les boutons et les rebonds\n    ButtonDebounce ();\n}"},{"id":"text-16","heading":"Text","content":"// la fonction lit les états des commutateurs à bouton-poussoir, les affiche et verrouille les états des voyants\n// bascule les états des voyants à chaque cycle push-release\n// codé en dur pour faire rebondir deux commutateurs sur les broches 2 et 3; et deux LED sur les broches 6 et 7\n// fonction adaptée de l&#39;exemple intégré Arduino IDE:\n// Fichier -&gt; Exemples -&gt; 02.Digital -&gt; Debounce\nvide ButtonDebounce (vide)\n{\n    statique octet buttonState[2]     = FAIBLE, FAIBLE;   // la lecture actuelle de la broche d&#39;entrée\n    statique octet lastButtonState[2] = FAIBLE, FAIBLE;   // la lecture précédente de la broche d&#39;entrée\n    \n    // les variables suivantes sont longues car le temps, mesuré en millisecondes,\n    // deviendra rapidement un nombre plus grand que ce qui peut être stocké dans un int.\n    statique longue lastDebounceTime[2] = 0;  // la dernière fois que la broche de sortie a été basculée\n    longue debounceDelay = 50;         // le temps de rebond; augmenter si la sortie scintille\n  \n    octet en train de lire[2];"},{"id":"text-17","heading":"Text","content":"en train de lire[0] = numériqueLire(2);\nen train de lire[1] = numériqueLire(3);\n    \n    pour (int i = 0; i &lt;2; i ++) \n        si (en train de lire[i] ! = lastButtonState[i]) \n            // réinitialiser le minuteur anti-rebond\n            lastDebounceTime[i] = millis();"},{"id":"text-18","heading":"Text","content":"si ((millis() - lastDebounceTime[i])&gt; debounceDelay) \n            // peu importe la lecture, ça fait plus longtemps\n            // que le délai anti-rebond, considérons-le comme l&#39;état actuel:\n        \n            // si l&#39;état du bouton a changé:\n            si (en train de lire[i] ! = buttonState[i]) \nbuttonState[i] = Lecture[i];\n          \n                // n&#39;inclue la LED que si le nouvel état du bouton est HIGH\n                si (buttonState[i] == HAUTE) \nLED_state[i] =! LED_state[i];"},{"id":"text-19","heading":"Text","content":"// fin de la boucle ()\n    \n    // régler les voyants\n    digitalWrite(6, LED_state[0])\n    digitalWrite(7, LED_state[1])\n      \n    // sauvegarde la lecture. La prochaine fois dans la boucle,\n    // ce sera le lastButtonState:\n    lastButtonState[0] = Lecture[0];\nlastButtonState[1] = Lecture[1];\n}"},{"id":"text-20","heading":"Text","content":"// vérifie si la requête HTTP reçue allume / éteint les voyants\n// enregistre également l&#39;état des voyants\nvide SetLEDs (vide)"},{"id":"text-21","heading":"Text","content":"// LED 1 (broche 6)\n    si (StrContains (HTTP_req, &quot;LED1 = 1&quot;)) \nLED_state[0] = 1;  // enregistrer l&#39;état de la LED\n        digitalWrite(6, HAUTE)"},{"id":"text-22","heading":"Text","content":"autre si (StrContains (HTTP_req, &quot;LED1 = 0&quot;)) \nLED_state[0] = 0;  // enregistrer l&#39;état de la LED\n        digitalWrite(6, FAIBLE)"},{"id":"text-23","heading":"Text","content":"// LED 2 (broche 7)\n    si (StrContains (HTTP_req, &quot;LED2 = 1&quot;)) \nLED_state[1] = 1;  // enregistrer l&#39;état de la LED\n        digitalWrite(sept, HAUTE)"},{"id":"text-24","heading":"Text","content":"autre si (StrContains (HTTP_req, &quot;LED2 = 0&quot;)) \nLED_state[1] = 0;  // enregistrer l&#39;état de la LED\n        digitalWrite(sept, FAIBLE)"},{"id":"text-25","heading":"Text","content":"// envoie le fichier XML avec des valeurs analogiques, changez le statut\n// et statut de la LED\nvide XML_response (EthernetClient cl)"},{"id":"text-26","heading":"Text","content":"int analog_val;            // stocke la valeur lue des entrées analogiques\n    int compter;                 // utilisé par les boucles &#39;pour&#39;\n    int sw_arr[] = 2, 3;  // broches interfacées avec des commutateurs\n    \n    cl.impression(&quot;&quot;)\ncl.impression(&quot;&quot;)\n    // Etat de la case à cocher\n    // LED1\n    cl.impression(&quot;&quot;)\n    si (LED_state[0]) \ncl.impression(&quot;vérifié&quot;)"},{"id":"text-27","heading":"Text","content":"autre \ncl.impression(&quot;décoché&quot;)"},{"id":"text-28","heading":"Text","content":"cl.imprimer(&quot;&quot;)\n    // états de la LED du bouton\n    // LED3\n    cl.impression(&quot;&quot;)\n    si (LED_state[1]) \ncl.impression(&quot;sur&quot;)"},{"id":"text-29","heading":"Text","content":"autre \ncl.impression(&quot;de&quot;)"},{"id":"text-30","heading":"Text","content":"cl.imprimer(&quot;&quot;)\ncl.impression(&quot;&quot;)"},{"id":"text-31","heading":"Text","content":"// met tous les éléments de str à 0 (efface le tableau)\nvide StrClear (carboniser * str, carboniser longueur)"},{"id":"text-32","heading":"Text","content":"pour (int i = 0; je &lt; longueur; i ++) \nstr[i] = 0;"},{"id":"text-33","heading":"Text","content":"// recherche la chaîne sfind dans la chaîne str\n// retourne 1 si une chaîne est trouvée\n// retourne 0 si la chaîne est introuvable\ncarboniser StrContains (carboniser * str, carboniser * sfind)"},{"id":"text-34","heading":"Text","content":"carboniser trouvé = 0;\n    carboniser indice = 0;\n    carboniser len;"},{"id":"text-35","heading":"Text","content":"len = strlen (str);\n    \n    si (strlen (sfind)&gt; len) \n        revenir 0;"},{"id":"text-36","heading":"Text","content":"tandis que (index &lt;len) \n        si (str[index] == sfind[found]) \ntrouvé ++;\n            si (strlen (sfind) == trouvé) \n                revenir 1;"},{"id":"text-37","heading":"Text","content":"autre \ntrouvé = 0;"},{"id":"text-38","heading":"Text","content":"index ++;"},{"id":"text-39","heading":"Text","content":"revenir 0;"},{"id":"text-40","heading":"Text","content":"Page HTML avec CSS et JavaScript intégrés\nLe code ci-dessous doit être copié dans un fichier appelé index.htm et le fichier index.htm doit être copié sur une carte micro SD à insérer dans la fente pour carte du bouclier Arduino.\nLe code HTML avec CSS et JavaScript incorporés consiste en une version modifiée du code de la partie 16 du tutoriel du serveur Web Arduino sur le serveur Web Ajax I / O."},{"id":"text-41","heading":"Text","content":"Arduino Ajax LED Button Control\n        \n    \n    \n    \n        Arduino Ajax LED Button Control\n        \n            LED utilisant la case à cocher\n            \n                LED 1 (D6)\n            \n        \n        \n            LED utilisant le bouton\n            La LED 2 est éteinte (D7)"},{"id":"text-42","heading":"Text","content":"Comment fonctionne le code\nLe code Arduino et la page HTML ont été copiés à partir de la partie 16 du didacticiel du serveur Web Arduino et modifiés.\nLe code a été nettoyé\nTous les codes inutiles pour les entrées analogiques, les cases à cocher et les boutons supplémentaires ont été supprimés des codes HTML, JavaScript et Arduino. Le code qui contrôle le voyant 2 a été modifié pour utiliser un bouton HTML.\nÀ ce stade, les deux voyants peuvent être contrôlés à l&#39;aide d&#39;une case à cocher sur la page Web hébergée sur Arduino pour le premier voyant et d&#39;un bouton sur la page HTML pour le deuxième voyant.\nAjout du code de contrôle du bouton physique\nRien de plus ne devait être modifié dans le code HTML / JavaScript pour les commutateurs matériels car les états des voyants étaient déjà renvoyés à la page Web à l&#39;aide de Ajax. L&#39;ajout de deux boutons poussoirs physiques pour contrôler les voyants mettrait à jour les états mémorisés des voyants dans l&#39;Arduino, qui seraient ensuite envoyés à la page Web lors de la prochaine demande Ajax.\nBasculer le rebondissement et le verrouillage\nLes boutons-poussoirs momentanés ne se verrouillent pas. En appuyant sur le bouton, vous fermez le circuit. Relâchez le bouton. Le circuit s&#39;ouvre à nouveau. Les contacts ne restent jamais fermés, mais restent ouverts lorsque le bouton est relâché.\nLes boutons, commutateurs et relais ont tous un rebond de contact. C’est-à-dire que lorsque les contacts du commutateur sont fermés, ils ne se ferment pas proprement et restent fermés, mais rebondissent plutôt pendant un court laps de temps.\nPar rebond, nous voulons dire qu’ils se ferment initialement, puis rebondissent, puis se referment, puis s’ouvrent et se referment plusieurs fois avant de s’installer. Ce rebond ne sera pas perçu si le commutateur est utilisé dans un circuit qui allume directement une lumière, mais sera détecté par un microcontrôleur fonctionnant à plusieurs mégahertz.\nLes commutateurs peuvent être &quot;traités&quot; à l&#39;aide d&#39;un logiciel qui attend que les contacts du commutateur soient réglés.\nIl existe déjà quelques logiciels dans les exemples intégrés Arduino IDE qui permettent de transformer un commutateur à bouton-poussoir momentané en un commutateur à verrouillage et de supprimer simultanément les contacts du commutateur.\nL&#39;exemple peut être trouvé dans le menu Arduino IDE: Fichier → Exemples → 02. Numérique → Debounce\nLorsque cet exemple de code est chargé sur l’Arduino, appuyez et relâchez une fois le commutateur à bouton-poussoir pour allumer un voyant. Appuyer et relâcher une seconde fois le bouton-poussoir éteint la DEL.\nDans le code Arduino de ce projet, l’IDE ​​Arduino Debounce exemple de code est utilisé dans la fonction ButtonDebounce () faire rebondir et verrouiller les deux boutons-poussoirs et basculer les états des voyants.\nLe code est modifié pour gérer deux boutons poussoirs et deux voyants en convertissant les variables du code en tableaux bidimensionnels et en utilisant un élément du tableau par paire de boutons poussoirs / voyants.\nMise à jour des états des voyants sur la page Web\nLe tableau LED_state[]  conserve les états actuels des deux voyants et est modifié par le ButtonDebounce () une fonction. Ce même tableau est également modifié par la case à cocher et le bouton HTML de la page Web dans la SetLEDs () une fonction.\nLorsque vous appuyez sur un bouton physique ou que vous cliquez sur la case à cocher ou le bouton HTML sur la page Web, l’état de la DEL est mis à jour dans LED_state[]  tableau.\nLa prochaine fois que la page Web effectue une demande Ajax, le voyant indique LED_state[]  sont utilisés pour mettre à jour le fichier XML qui est renvoyé à la page Web lorsque le XML_response () la fonction est appelée.\nCeci met à jour la case à cocher pour cocher ou décocher et le texte du bouton HTML pour ON ou OFF."},{"id":"text-43","heading":"Text","content":"Veuillez activer JavaScript pour afficher les commentaires générés par Disqus."},{"id":"text-44","heading":"Text","content":"Click to rate this post!\n                                   \n                               [Total: 0  Average: 0]"}],"media":{"primary_image":""},"relations":[{"rel":"canonical","href":"https://tutos-gameserver.fr/2019/10/12/arduino-web-server-et-controle-des-voyants-de-la-page-web-a-laide-du-bouton-html-et-du-bouton-poussoir-physique-serveur-dimpression/"},{"rel":"alternate","href":"https://tutos-gameserver.fr/2019/10/12/arduino-web-server-et-controle-des-voyants-de-la-page-web-a-laide-du-bouton-html-et-du-bouton-poussoir-physique-serveur-dimpression/llm","type":"text/html"},{"rel":"alternate","href":"https://tutos-gameserver.fr/2019/10/12/arduino-web-server-et-controle-des-voyants-de-la-page-web-a-laide-du-bouton-html-et-du-bouton-poussoir-physique-serveur-dimpression/llm.json","type":"application/json"},{"rel":"llm-manifest","href":"https://tutos-gameserver.fr/llm-endpoints-manifest.json","type":"application/json"}],"http_headers":{"X-LLM-Friendly":"1","X-LLM-Schema":"1.1.0","Content-Security-Policy":"default-src 'none'; img-src * data:; style-src 'unsafe-inline'"},"license":"CC BY-ND 4.0","attribution_required":true,"allow_cors":false}