EtherTen + Ridiculous code

Hi Guys,

Been working for a few weeks on a project to turn on/off some power points via relays and using the EtherTen's ethernet features, so to start with I started with a basic bit of code to start a webserver on the arduino with a simple bit of text to click on and off the lights. However I didn't want to use the actual arduino hosted page due to its not so pretty looks, so I hosted a website on my XAMPP server that looks a bit nice and created a link to the arduino ie 192.168.2.102:84/?on1. The problem was that it navigated away from my pretty page and after three days I couldn't get an iframe to work so I have to use Jquery and JSON, see code below.

The XAMPP side code

<span style="float:right;padding-top:10px;padding-right:12px;font-size:18px; font-weight:bold;"><span onclick="javascript:{$.get('http://192.168.2.102:84/?on2');}">ON</span> | <span onclick="javascript:{$.get('http://192.168.2.102:84/?off2');}">OFF</span></li></span>

The Ardunio Code

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
byte ip[] = { 192, 168, 2, 102 }; // ip in lan
byte gateway[] = { 192, 168, 2, 1 }; // internet access via router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
Server server(84); //server port

String readString; 

//////////////////////

void setup(){

  pinMode(4, OUTPUT); //pin selected to control
  pinMode(2, OUTPUT); //pin selected to control
  //start Ethernet
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();

  //enable serial data print 
  Serial.begin(9600); 
  Serial.println("SFAP Running"); // so I can keep track of what is loaded
}

void loop(){
  // Create a client connection
  Client client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();

        //read char by char HTTP request
        if (readString.length() < 100) {

          //store characters to string 
          readString += c; 
          //Serial.print(c);
        } 

        //if HTTP request has ended
        if (c == '\n') {

          ///////////////
          Serial.println(readString); //print to serial monitor for debuging 

          ///////////////////// control arduino pin
          if(readString.indexOf("on4") >0)//checks for on
          {
            digitalWrite(4, HIGH);    // set pin 4 high
            Serial.println("Led 4 On");
          }
          if(readString.indexOf("off4") >0)//checks for off
          {
            digitalWrite(4, LOW);    // set pin 4 low
            Serial.println("Led 4 Off");
          }
          
          if(readString.indexOf("on2") >0)//checks for on
          {
            digitalWrite(2, HIGH);    // set pin 4 high
            Serial.println("Led 2 On");
          }
          if(readString.indexOf("off2") >0)//checks for off
          {
            digitalWrite(2, LOW);    // set pin 4 low
            Serial.println("Led 2 Off");
          }
          
          //now output HTML data header
             if(readString.indexOf('?') >=0) { //don't send new page
               client.println("HTTP/1.1 204 Jotaris");
               client.println();
               client.println();  
             }
             else {
          client.println("HTTP/1.1 200 OK"); //send new page
          client.println("Content-Type: application/json");
          client.println();

	client.print("{\"content\":\"");
	if(readString.indexOf("on2")>0)
		{
		client.print("Switch 1 = ON");
		}
	else if(readString.indexOf("off2")>0)
		{
		client.print("Switch 1 = OFF");
		}
        else
                {
                client.print("Switch 1 = UNKNOWN");
                }
	client.print("; ");
	if(readString.indexOf("on4")>0)
		{
		client.print("Switch 2 = ON");
		}
	else if(readString.indexOf("off4")>0)
		{
		client.print("Switch 2 = OFF");
		}
        else
                {
                client.print("Switch 2 = UNKNOWN");
                }
	client.print("\"}");

             }

          delay(1);
          //stopping client
          client.stop();
          
          //clearing string for next read
          readString="";

        }
      }
    }
  }
}

The questions are...

  1. Is there a way to for me to read the state of the relay (its not double pole so it would have to remember if its on or off) and request the information from my XAMPP site so when I go the page it can tell me if my lights are on?

  2. I have a PIR that I would like to activate one of the relays by motion sensing as well as by my website? Ie I have a light outside plugged into one of the powerpoints with a relay and I would like it to turn on when I walk past. As well as being able to manually turn in on?

I can run a mysql database and php off my server to hold values if there is a way for the arduino to read commands from a database. That way the DB could remember the relay state.

Idea's and thoughts would be much appreciated.

For question 1, you could use an optocoupler in series with the relay.
(i missed what voltage it is, etc) this could then feed back the state.

You simply have the contacts in parallel, so that it turns on the relay from either the PIR, controller, or a switch.

mark