Here is Part 2 of the code:
void loop()
{
recvWithStartEndMarkers();
parseData();
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)
{
if (newData == false) {
cl.print("<p>");
cl.print("Current Voltage: ");
cl.print(Volts);
cl.print("<p>");
cl.print("Current Amps: ");
cl.print(a);
cl.print("<p>");
cl.print("Battery Percent Full: ");
cl.print(percent_Full);
cl.print("<p>");
cl.print("Net Power (watts): ");
cl.print(watts);
}
}
void recvWithStartEndMarkers() {
static boolean recvInProgress = false;
static byte ndx = 0;
char startMarker = '%';
char endMarker = '%';
char rc;
// if (Serial.available() > 0) {
while (Serial1.available() > 0 && newData == false) {
rc = Serial1.read();
if (recvInProgress == true) {
if (rc != endMarker) {
receivedChars[ndx] = rc;
ndx++;
if (ndx >= numChars) {
ndx = numChars - 1;
}
}
else {
receivedChars[ndx] = '\0'; // terminate the string
recvInProgress = false;
ndx = 0;
newData = true;
Serial.print(receivedChars);
}
}
else if (rc == startMarker) {
receivedChars[ndx] = rc;
ndx++;
recvInProgress = true;
}
}
}
void parseData() {
if (newData== true){
char *strtokIndx;
strtokIndx = strtok(receivedChars,","); // get the first part - the string
strcpy(percent_Full, strtokIndx); // copy it to messageFromPC
Serial.println(strtokIndx);
Serial.println(percent_Full);
strtokIndx = strtok(NULL, ","); // this continues where the previous call left off
strcpy(watts, strtokIndx); // copy it to messageFromPC
Serial.println(strtokIndx);
Serial.println(watts);
strtokIndx = strtok(NULL, ",");
strcpy(dayCharge, strtokIndx); // copy it to messageFromPC
Serial.println(strtokIndx);
Serial.println(dayCharge);
strtokIndx = strtok(NULL, ",");
strcpy(dayEqual, strtokIndx); // copy it to messageFromPC
Serial.println(strtokIndx);
Serial.println(dayEqual);
strtokIndx = strtok(NULL, ",");
strcpy(PW_1, strtokIndx); // copy it to messageFromPC
Serial.println(strtokIndx);
Serial.println(PW_1);
strtokIndx = strtok(NULL, ",");
strcpy(Volts, strtokIndx); // copy it to messageFromPC
Serial.println(strtokIndx);
Serial.println(Volts);
strtokIndx = strtok(NULL, ",");
strcpy(filtered_Volts, strtokIndx); // copy it to messageFromPC
Serial.println(strtokIndx);
Serial.println(filtered_Volts);
strtokIndx = strtok(NULL, ",");
strcpy(v2, strtokIndx); // copy it to messageFromPC
Serial.println(strtokIndx);
Serial.println(v2);
strtokIndx = strtok(NULL, ",");
strcpy(a, strtokIndx); // copy it to messageFromPC
Serial.println(strtokIndx);
Serial.println(a);
strtokIndx = strtok(NULL, ",");
strcpy(fa, strtokIndx); // copy it to messageFromPC
Serial.println(strtokIndx);
Serial.println(fa);
strtokIndx = strtok(NULL, ",");
strcpy(PW_2, strtokIndx); // copy it to messageFromPC
Serial.println(strtokIndx);
Serial.println(PW_2);
strtokIndx = strtok(NULL, ",");
strcpy(AH, strtokIndx); // copy it to messageFromPC
Serial.println(strtokIndx);
Serial.println(AH);
strtokIndx = strtok(NULL, ",");
Serial.println(strtokIndx);
//strcpy(filteredV, strtokIndx); // copy it to messageFromPC
newData =false;
printParse();
}
}
void printParse(){
Serial.println("----Parse Print-----");
Serial.println(percent_Full);
Serial.println(watts);
//Serial.println(dayCharge);
//Serial.println(dayEqual);
//Serial.println(PW_1);
Serial.println(Volts);
//Serial.println(filtered_Volts);
//Serial.println(v2);
Serial.println(a);
//Serial.println(fa);
//Serial.println(PW_2);
//Serial.println(AH);
}