Created
January 26, 2017 16:23
-
-
Save wtrssn/9feb1c4927fad6a54f17596e09a2ab8d to your computer and use it in GitHub Desktop.
Analog Inputs and Switches using AJAX
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*-------------------------------------------------------------- | |
Program: eth_websrv_AJAX_IN | |
Description: Uses Ajax to update the state of two switches | |
and an analog input on a web page. The Arduino | |
web server hosts the web page. | |
Does not use the SD card. | |
Hardware: Arduino Uno and official Arduino Ethernet | |
shield. Should work with other Arduinos and | |
compatible Ethernet shields. | |
Software: Developed using Arduino 1.0.3 software | |
Should be compatible with Arduino 1.0 + | |
References: - WebServer example by David A. Mellis and | |
modified by Tom Igoe | |
- Ethernet library documentation: | |
http://arduino.cc/en/Reference/Ethernet | |
- Learning PHP, MySQL & JavaScript by | |
Robin Nixon, O'Reilly publishers | |
Date: 20 February 2013 | |
Author: W.A. Smith, http://startingelectronics.org | |
--------------------------------------------------------------*/ | |
#include <SPI.h> | |
#include <Ethernet.h> | |
// MAC address from Ethernet shield sticker under board | |
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; | |
IPAddress ip(192, 168, 1, 177); // IP address, may need to change depending on network | |
EthernetServer server(80); // create a server at port 80 | |
String HTTP_req; // stores the HTTP request | |
const int SWITCH_02 = 2; | |
const int SWITCH_03 = 3; | |
const int POTENC_00 = 0; | |
void setup() | |
{ | |
Ethernet.begin(mac, ip); // initialize Ethernet device | |
server.begin(); // start to listen for clients | |
Serial.begin(9600); // for diagnostics | |
pinMode(SWITCH_02, INPUT); // switch is attached to Arduino pin 7 | |
pinMode(SWITCH_03, INPUT); // switch is attached to Arduino pin 8 | |
} | |
void loop() | |
{ | |
EthernetClient client = server.available(); // try to get client | |
if (client) { // got client? | |
boolean currentLineIsBlank = true; | |
while (client.connected()) { | |
if (client.available()) { // client data available to read | |
char c = client.read(); // read 1 byte (character) from client | |
HTTP_req += c; // save the HTTP request 1 char at a time | |
// last line of client request is blank and ends with \n | |
// respond to client only after last line received | |
if (c == '\n' && currentLineIsBlank) { | |
// send a standard http response header | |
client.println("HTTP/1.1 200 OK"); | |
client.println("Content-Type: text/html"); | |
client.println("Connection: keep-alive"); | |
client.println(); | |
// AJAX request for switch state | |
if (HTTP_req.indexOf("ajax_switch") > -1) { | |
// read switch state and analog input | |
GetAjaxData(client); | |
} | |
else { // HTTP request for web page | |
// send web page - contains JavaScript with AJAX calls | |
client.println("<!DOCTYPE html>"); | |
client.println("<html>"); | |
client.println("<head>"); | |
client.println("<title>Arduino Web Page</title>"); | |
client.println("<script>"); | |
client.println("function GetSwitchAnalogData() {"); | |
client.println( | |
"nocache = \"&nocache=\" + Math.random() * 1000000;"); | |
client.println("var request = new XMLHttpRequest();"); | |
client.println("request.onreadystatechange = function() {"); | |
client.println("if (this.readyState == 4) {"); | |
client.println("if (this.status == 200) {"); | |
client.println("if (this.responseText != null) {"); | |
client.println("document.getElementById(\"sw_an_data\")\.innerHTML = this.responseText;"); | |
client.println("}}}}"); | |
client.println("request.open(\"GET\", \"ajax_switch\" + nocache, true);"); | |
client.println("request.send(null);"); | |
client.println("setTimeout('GetSwitchAnalogData()', 1000);"); | |
client.println("}"); | |
client.println("</script>"); | |
client.println("</head>"); | |
client.println("<body onload=\"GetSwitchAnalogData()\">"); | |
client.println("<h1>Arduino AJAX Input</h1>"); | |
client.println("<div id=\"sw_an_data\">"); | |
client.println("</div>"); | |
client.println("</body>"); | |
client.println("</html>"); | |
} | |
// display received HTTP request on serial port | |
Serial.print(HTTP_req); | |
HTTP_req = ""; // finished with request, empty string | |
break; | |
} | |
// every line of text received from the client ends with \r\n | |
if (c == '\n') { | |
// last character on line of received text | |
// starting new line with next character read | |
currentLineIsBlank = true; | |
} | |
else if (c != '\r') { | |
// a text character was received from client | |
currentLineIsBlank = false; | |
} | |
} // end if (client.available()) | |
} // end while (client.connected()) | |
delay(1); // give the web browser time to receive the data | |
client.stop(); // close the connection | |
} // end if (client) | |
} | |
// send the state of the switch to the web browser | |
void GetAjaxData(EthernetClient cl) | |
{ | |
int analog_val; | |
if (digitalRead(SWITCH_02)) { | |
cl.println("<p>Switch 2 state: ON</p>"); | |
} | |
else { | |
cl.println("<p>Switch 2 state: OFF</p>"); | |
} | |
if (digitalRead(SWITCH_03)) { | |
cl.println("<p>Switch 3 state: ON</p>"); | |
} | |
else { | |
cl.println("<p>Switch 3 state: OFF</p>"); | |
} | |
// read analog pin A2 | |
analog_val = analogRead(POTENC_00); | |
cl.print("<p>Analog A0: "); | |
cl.print(analog_val); | |
cl.println("</p>"); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment