<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://onnocenter.or.id/wiki/index.php?action=history&amp;feed=atom&amp;title=Arduino%3A_Ethernet_Web_Server_Input</id>
	<title>Arduino: Ethernet Web Server Input - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://onnocenter.or.id/wiki/index.php?action=history&amp;feed=atom&amp;title=Arduino%3A_Ethernet_Web_Server_Input"/>
	<link rel="alternate" type="text/html" href="https://onnocenter.or.id/wiki/index.php?title=Arduino:_Ethernet_Web_Server_Input&amp;action=history"/>
	<updated>2026-04-19T20:32:31Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.4</generator>
	<entry>
		<id>https://onnocenter.or.id/wiki/index.php?title=Arduino:_Ethernet_Web_Server_Input&amp;diff=45257&amp;oldid=prev</id>
		<title>Onnowpurbo: New page: Sumber: https://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/SD-card-IO/   ==Code==   /*--------------------------------------------------------------    P...</title>
		<link rel="alternate" type="text/html" href="https://onnocenter.or.id/wiki/index.php?title=Arduino:_Ethernet_Web_Server_Input&amp;diff=45257&amp;oldid=prev"/>
		<updated>2015-12-07T02:02:34Z</updated>

		<summary type="html">&lt;p&gt;New page: Sumber: https://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/SD-card-IO/   ==Code==   /*--------------------------------------------------------------    P...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Sumber: https://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/SD-card-IO/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&lt;br /&gt;
 /*--------------------------------------------------------------&lt;br /&gt;
   Program:      eth_websrv_SD_Ajax_in_out&lt;br /&gt;
 &lt;br /&gt;
   Description:  Arduino web server that displays 4 analog inputs,&lt;br /&gt;
                 the state of 3 switches and controls 4 outputs,&lt;br /&gt;
                 2 using checkboxes and 2 using buttons.&lt;br /&gt;
                 The web page is stored on the micro SD card.&lt;br /&gt;
   &lt;br /&gt;
   Hardware:     Arduino Uno and official Arduino Ethernet&lt;br /&gt;
                 shield. Should work with other Arduinos and&lt;br /&gt;
                 compatible Ethernet shields.&lt;br /&gt;
                 2Gb micro SD card formatted FAT16.&lt;br /&gt;
                 A2 to A4 analog inputs, pins 2, 3 and 5 for&lt;br /&gt;
                 the switches, pins 6 to 9 as outputs (LEDs).&lt;br /&gt;
                 &lt;br /&gt;
   Software:     Developed using Arduino 1.0.5 software&lt;br /&gt;
                 Should be compatible with Arduino 1.0 +&lt;br /&gt;
                 SD card contains web page called index.htm&lt;br /&gt;
   &lt;br /&gt;
   References:   - WebServer example by David A. Mellis and &lt;br /&gt;
                   modified by Tom Igoe&lt;br /&gt;
                 - SD card examples by David A. Mellis and&lt;br /&gt;
                   Tom Igoe&lt;br /&gt;
                 - Ethernet library documentation:&lt;br /&gt;
                   http://arduino.cc/en/Reference/Ethernet&lt;br /&gt;
                 - SD Card library documentation:&lt;br /&gt;
                   http://arduino.cc/en/Reference/SD &lt;br /&gt;
 &lt;br /&gt;
   Date:         4 April 2013&lt;br /&gt;
   Modified:     19 June 2013&lt;br /&gt;
                 - removed use of the String class&lt;br /&gt;
   &lt;br /&gt;
   Author:       W.A. Smith, http://startingelectronics.com&lt;br /&gt;
 --------------------------------------------------------------*/&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;Ethernet.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;SD.h&amp;gt;&lt;br /&gt;
 // size of buffer used to capture HTTP requests&lt;br /&gt;
 #define REQ_BUF_SZ   60&lt;br /&gt;
 &lt;br /&gt;
 // MAC address from Ethernet shield sticker under board&lt;br /&gt;
 byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };&lt;br /&gt;
 IPAddress ip(192, 168, 0, 20); // IP address, may need to change depending on network&lt;br /&gt;
 EthernetServer server(80);  // create a server at port 80&lt;br /&gt;
 File webFile;               // the web page file on the SD card&lt;br /&gt;
 char HTTP_req[REQ_BUF_SZ] = {0}; // buffered HTTP request stored as null terminated string&lt;br /&gt;
 char req_index = 0;              // index into HTTP_req buffer&lt;br /&gt;
 boolean LED_state[4] = {0}; // stores the states of the LEDs&lt;br /&gt;
 &lt;br /&gt;
 void setup()&lt;br /&gt;
 {&lt;br /&gt;
     // disable Ethernet chip&lt;br /&gt;
     pinMode(10, OUTPUT);&lt;br /&gt;
     digitalWrite(10, HIGH);&lt;br /&gt;
     &lt;br /&gt;
     Serial.begin(9600);       // for debugging&lt;br /&gt;
     &lt;br /&gt;
     // initialize SD card&lt;br /&gt;
     Serial.println(&amp;quot;Initializing SD card...&amp;quot;);&lt;br /&gt;
     if (!SD.begin(4)) {&lt;br /&gt;
         Serial.println(&amp;quot;ERROR - SD card initialization failed!&amp;quot;);&lt;br /&gt;
         return;    // init failed&lt;br /&gt;
     }&lt;br /&gt;
     Serial.println(&amp;quot;SUCCESS - SD card initialized.&amp;quot;);&lt;br /&gt;
     // check for index.htm file&lt;br /&gt;
     if (!SD.exists(&amp;quot;index.htm&amp;quot;)) {&lt;br /&gt;
         Serial.println(&amp;quot;ERROR - Can't find index.htm file!&amp;quot;);&lt;br /&gt;
         return;  // can't find index file&lt;br /&gt;
     }&lt;br /&gt;
     Serial.println(&amp;quot;SUCCESS - Found index.htm file.&amp;quot;);&lt;br /&gt;
     // switches on pins 2, 3 and 5&lt;br /&gt;
     pinMode(2, INPUT);&lt;br /&gt;
     pinMode(3, INPUT);&lt;br /&gt;
     pinMode(5, INPUT);&lt;br /&gt;
     // LEDs&lt;br /&gt;
     pinMode(6, OUTPUT);&lt;br /&gt;
     pinMode(7, OUTPUT);&lt;br /&gt;
     pinMode(8, OUTPUT);&lt;br /&gt;
     pinMode(9, OUTPUT);&lt;br /&gt;
     &lt;br /&gt;
     Ethernet.begin(mac, ip);  // initialize Ethernet device&lt;br /&gt;
     server.begin();           // start to listen for clients&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void loop()&lt;br /&gt;
 {&lt;br /&gt;
     EthernetClient client = server.available();  // try to get client &lt;br /&gt;
 &lt;br /&gt;
     if (client) {  // got client?&lt;br /&gt;
         boolean currentLineIsBlank = true;&lt;br /&gt;
         while (client.connected()) {&lt;br /&gt;
             if (client.available()) {   // client data available to read&lt;br /&gt;
                 char c = client.read(); // read 1 byte (character) from client&lt;br /&gt;
                 // limit the size of the stored received HTTP request&lt;br /&gt;
                 // buffer first part of HTTP request in HTTP_req array (string)&lt;br /&gt;
                 // leave last element in array as 0 to null terminate string (REQ_BUF_SZ - 1)&lt;br /&gt;
                 if (req_index &amp;lt; (REQ_BUF_SZ - 1)) {&lt;br /&gt;
                     HTTP_req[req_index] = c;          // save HTTP request character&lt;br /&gt;
                     req_index++;&lt;br /&gt;
                 }&lt;br /&gt;
                 // last line of client request is blank and ends with \n&lt;br /&gt;
                 // respond to client only after last line received&lt;br /&gt;
                 if (c == '\n' &amp;amp;&amp;amp; currentLineIsBlank) {&lt;br /&gt;
                     // send a standard http response header&lt;br /&gt;
                     client.println(&amp;quot;HTTP/1.1 200 OK&amp;quot;);&lt;br /&gt;
                     // remainder of header follows below, depending on if&lt;br /&gt;
                     // web page or XML page is requested&lt;br /&gt;
                     // Ajax request - send XML file&lt;br /&gt;
                     if (StrContains(HTTP_req, &amp;quot;ajax_inputs&amp;quot;)) {&lt;br /&gt;
                         // send rest of HTTP header&lt;br /&gt;
                         client.println(&amp;quot;Content-Type: text/xml&amp;quot;);&lt;br /&gt;
                         client.println(&amp;quot;Connection: keep-alive&amp;quot;);&lt;br /&gt;
                         client.println();&lt;br /&gt;
                         SetLEDs();&lt;br /&gt;
                         // send XML file containing input states&lt;br /&gt;
                         XML_response(client);&lt;br /&gt;
                     }&lt;br /&gt;
                     else {  // web page request&lt;br /&gt;
                         // send rest of HTTP header&lt;br /&gt;
                         client.println(&amp;quot;Content-Type: text/html&amp;quot;);&lt;br /&gt;
                         client.println(&amp;quot;Connection: keep-alive&amp;quot;);&lt;br /&gt;
                         client.println();&lt;br /&gt;
                         // send web page&lt;br /&gt;
                         webFile = SD.open(&amp;quot;index.htm&amp;quot;);        // open web page file&lt;br /&gt;
                         if (webFile) {&lt;br /&gt;
                             while(webFile.available()) {&lt;br /&gt;
                                 client.write(webFile.read()); // send web page to client&lt;br /&gt;
                             }&lt;br /&gt;
                             webFile.close();&lt;br /&gt;
                         }&lt;br /&gt;
                     }&lt;br /&gt;
                     // display received HTTP request on serial port&lt;br /&gt;
                     Serial.print(HTTP_req);&lt;br /&gt;
                     // reset buffer index and all buffer elements to 0&lt;br /&gt;
                     req_index = 0;&lt;br /&gt;
                     StrClear(HTTP_req, REQ_BUF_SZ);&lt;br /&gt;
                     break;&lt;br /&gt;
                 }&lt;br /&gt;
                 // every line of text received from the client ends with \r\n&lt;br /&gt;
                 if (c == '\n') {&lt;br /&gt;
                     // last character on line of received text&lt;br /&gt;
                     // starting new line with next character read&lt;br /&gt;
                     currentLineIsBlank = true;&lt;br /&gt;
                 } &lt;br /&gt;
                 else if (c != '\r') {&lt;br /&gt;
                     // a text character was received from client&lt;br /&gt;
                     currentLineIsBlank = false;&lt;br /&gt;
                 }&lt;br /&gt;
             } // end if (client.available())&lt;br /&gt;
         } // end while (client.connected())&lt;br /&gt;
         delay(1);      // give the web browser time to receive the data&lt;br /&gt;
         client.stop(); // close the connection&lt;br /&gt;
     } // end if (client)&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // checks if received HTTP request is switching on/off LEDs&lt;br /&gt;
 // also saves the state of the LEDs&lt;br /&gt;
 void SetLEDs(void)&lt;br /&gt;
 {&lt;br /&gt;
     // LED 1 (pin 6)&lt;br /&gt;
     if (StrContains(HTTP_req, &amp;quot;LED1=1&amp;quot;)) {&lt;br /&gt;
         LED_state[0] = 1;  // save LED state&lt;br /&gt;
         digitalWrite(6, HIGH);&lt;br /&gt;
     }&lt;br /&gt;
     else if (StrContains(HTTP_req, &amp;quot;LED1=0&amp;quot;)) {&lt;br /&gt;
         LED_state[0] = 0;  // save LED state&lt;br /&gt;
         digitalWrite(6, LOW);&lt;br /&gt;
     }&lt;br /&gt;
     // LED 2 (pin 7)&lt;br /&gt;
     if (StrContains(HTTP_req, &amp;quot;LED2=1&amp;quot;)) {&lt;br /&gt;
         LED_state[1] = 1;  // save LED state&lt;br /&gt;
         digitalWrite(7, HIGH);&lt;br /&gt;
     }&lt;br /&gt;
     else if (StrContains(HTTP_req, &amp;quot;LED2=0&amp;quot;)) {&lt;br /&gt;
         LED_state[1] = 0;  // save LED state&lt;br /&gt;
         digitalWrite(7, LOW);&lt;br /&gt;
     }&lt;br /&gt;
     // LED 3 (pin 8)&lt;br /&gt;
     if (StrContains(HTTP_req, &amp;quot;LED3=1&amp;quot;)) {&lt;br /&gt;
         LED_state[2] = 1;  // save LED state&lt;br /&gt;
         digitalWrite(8, HIGH);&lt;br /&gt;
     }&lt;br /&gt;
     else if (StrContains(HTTP_req, &amp;quot;LED3=0&amp;quot;)) {&lt;br /&gt;
         LED_state[2] = 0;  // save LED state&lt;br /&gt;
         digitalWrite(8, LOW);&lt;br /&gt;
     }&lt;br /&gt;
     // LED 4 (pin 9)&lt;br /&gt;
     if (StrContains(HTTP_req, &amp;quot;LED4=1&amp;quot;)) {&lt;br /&gt;
         LED_state[3] = 1;  // save LED state&lt;br /&gt;
         digitalWrite(9, HIGH);&lt;br /&gt;
     }&lt;br /&gt;
     else if (StrContains(HTTP_req, &amp;quot;LED4=0&amp;quot;)) {&lt;br /&gt;
         LED_state[3] = 0;  // save LED state&lt;br /&gt;
         digitalWrite(9, LOW);&lt;br /&gt;
     }&lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
 // send the XML file with analog values, switch status&lt;br /&gt;
 //  and LED status&lt;br /&gt;
 void XML_response(EthernetClient cl)&lt;br /&gt;
 {&lt;br /&gt;
     int analog_val;            // stores value read from analog inputs&lt;br /&gt;
     int count;                 // used by 'for' loops&lt;br /&gt;
     int sw_arr[] = {2, 3, 5};  // pins interfaced to switches&lt;br /&gt;
     &lt;br /&gt;
     cl.print(&amp;quot;&amp;lt;?xml version = \&amp;quot;1.0\&amp;quot; ?&amp;gt;&amp;quot;);&lt;br /&gt;
     cl.print(&amp;quot;&amp;lt;inputs&amp;gt;&amp;quot;);&lt;br /&gt;
     // read analog inputs&lt;br /&gt;
     for (count = 2; count &amp;lt;= 5; count++) { // A2 to A5&lt;br /&gt;
         analog_val = analogRead(count);&lt;br /&gt;
         cl.print(&amp;quot;&amp;lt;analog&amp;gt;&amp;quot;);&lt;br /&gt;
         cl.print(analog_val);&lt;br /&gt;
         cl.println(&amp;quot;&amp;lt;/analog&amp;gt;&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     // read switches&lt;br /&gt;
     for (count = 0; count &amp;lt; 3; count++) {&lt;br /&gt;
         cl.print(&amp;quot;&amp;lt;switch&amp;gt;&amp;quot;);&lt;br /&gt;
         if (digitalRead(sw_arr[count])) {&lt;br /&gt;
             cl.print(&amp;quot;ON&amp;quot;);&lt;br /&gt;
         }&lt;br /&gt;
         else {&lt;br /&gt;
             cl.print(&amp;quot;OFF&amp;quot;);&lt;br /&gt;
         }&lt;br /&gt;
         cl.println(&amp;quot;&amp;lt;/switch&amp;gt;&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     // checkbox LED states&lt;br /&gt;
     // LED1&lt;br /&gt;
     cl.print(&amp;quot;&amp;lt;LED&amp;gt;&amp;quot;);&lt;br /&gt;
     if (LED_state[0]) {&lt;br /&gt;
         cl.print(&amp;quot;checked&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     else {&lt;br /&gt;
         cl.print(&amp;quot;unchecked&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     cl.println(&amp;quot;&amp;lt;/LED&amp;gt;&amp;quot;);&lt;br /&gt;
     // LED2&lt;br /&gt;
     cl.print(&amp;quot;&amp;lt;LED&amp;gt;&amp;quot;);&lt;br /&gt;
     if (LED_state[1]) {&lt;br /&gt;
         cl.print(&amp;quot;checked&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     else {&lt;br /&gt;
         cl.print(&amp;quot;unchecked&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
      cl.println(&amp;quot;&amp;lt;/LED&amp;gt;&amp;quot;);&lt;br /&gt;
     // button LED states&lt;br /&gt;
     // LED3&lt;br /&gt;
     cl.print(&amp;quot;&amp;lt;LED&amp;gt;&amp;quot;);&lt;br /&gt;
     if (LED_state[2]) {&lt;br /&gt;
         cl.print(&amp;quot;on&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     else {&lt;br /&gt;
         cl.print(&amp;quot;off&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     cl.println(&amp;quot;&amp;lt;/LED&amp;gt;&amp;quot;);&lt;br /&gt;
     // LED4&lt;br /&gt;
     cl.print(&amp;quot;&amp;lt;LED&amp;gt;&amp;quot;);&lt;br /&gt;
     if (LED_state[3]) {&lt;br /&gt;
         cl.print(&amp;quot;on&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     else {&lt;br /&gt;
         cl.print(&amp;quot;off&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     cl.println(&amp;quot;&amp;lt;/LED&amp;gt;&amp;quot;);&lt;br /&gt;
     &lt;br /&gt;
     cl.print(&amp;quot;&amp;lt;/inputs&amp;gt;&amp;quot;);&lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
 // sets every element of str to 0 (clears array)&lt;br /&gt;
 void StrClear(char *str, char length)&lt;br /&gt;
 {&lt;br /&gt;
     for (int i = 0; i &amp;lt; length; i++) {&lt;br /&gt;
         str[i] = 0;&lt;br /&gt;
     }&lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
 // searches for the string sfind in the string str&lt;br /&gt;
 // returns 1 if string found&lt;br /&gt;
 // returns 0 if string not found&lt;br /&gt;
 char StrContains(char *str, char *sfind)&lt;br /&gt;
 {&lt;br /&gt;
     char found = 0;&lt;br /&gt;
     char index = 0;&lt;br /&gt;
     char len;&lt;br /&gt;
 &lt;br /&gt;
     len = strlen(str);&lt;br /&gt;
     &lt;br /&gt;
     if (strlen(sfind) &amp;gt; len) {&lt;br /&gt;
         return 0;&lt;br /&gt;
     }&lt;br /&gt;
     while (index &amp;lt; len) {&lt;br /&gt;
         if (str[index] == sfind[found]) {&lt;br /&gt;
             found++;&lt;br /&gt;
             if (strlen(sfind) == found) {&lt;br /&gt;
                 return 1;&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         else {&lt;br /&gt;
             found = 0;&lt;br /&gt;
         }&lt;br /&gt;
         index++;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Source + index.html==&lt;br /&gt;
&lt;br /&gt;
* https://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/SD-card-IO/web_server_IO.zip&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Referensi==&lt;br /&gt;
&lt;br /&gt;
* https://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/SD-card-IO/&lt;/div&gt;</summary>
		<author><name>Onnowpurbo</name></author>
	</entry>
</feed>