Yet another web control project, with a catch

I'm new to arduino, and my C is quite rusty. I can follow along examples and understand them fine, which is how I was hoping to get started on this project. Kind of a "learn as I go" thing.

I have seen a lot of web controlled arduino tutorials and example code. Most of it is outdated and throws errors when I paste it into the IDE. Much of it assumes I've got an xbee or extra PC to run Processing on.

Theres the catch. I dont have any of that. I have an arduino uno and an ethernet shield. And if I scrounge really hard, I might be able to find a led for it to blink.

What I'm looking for is the arduino itself to act as the web server and handle control through basic HTML. I'm hoping taking this simpler approach will give me a good foundation for later adding on the fancier toys when budget allows. Hoping someone can point me in the right direction on how to advance from here.

Kamen: I have seen a lot of web controlled arduino tutorials and example code. Most of it is outdated and throws errors when I paste it into the IDE. Much of it assumes I've got an xbee or extra PC to run Processing on.

Then you aren't looking at the right examples.

Kamen: What I'm looking for is the arduino itself to act as the web server and handle control through basic HTML.

First you need to understand how HTML elements are converted to a URL. Then your Arduino code parses the URL.

That is exactly what I was hoping to hear. Can you point me toward the right examples?

Kamen: Much of it assumes I've got an xbee or extra PC

...

I dont have any of that.

If you don't have a PC, it's going to be quite difficult to develop your code and download it to the Arduino.

Web server test code for controlling arduino pins.

//zoomkat 3-17-12
//simple button GET server code to control servo and arduino pin 5
//for use with IDE 1.0
//open serial monitor to see what the arduino receives
//use the \ slash to escape the " in the html 
//address will look like http://192.168.1.102:84 when submited
//for use with W5100 based ethernet shields
//Powering a servo from the arduino usually DOES NOT WORK.
//note that the below bug fix may be required
// http://code.google.com/p/arduino/issues/detail?id=605 

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

//#include <Servo.h> 
//Servo myservo;  // create servo object to control a servo 

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

String readString; 

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

void setup(){

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

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

void loop(){
  // Create a client connection
  EthernetClient 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 

          client.println("HTTP/1.1 200 OK"); //send new page
          client.println("Content-Type: text/html");
          client.println();

          client.println("<HTML>");
          client.println("<HEAD>");
          client.println("<TITLE>Arduino GET test page</TITLE>");
          client.println("</HEAD>");
          client.println("<BODY>");

          client.println("<H1>Zoomkat's simple Arduino button</H1>");

          // DIY buttons
          client.println("<a href=\"/?on1\"\">ON</a>"); 
          client.println("<a href=\"/?off1\"\">OFF</a>
"); 

          // mousedown buttons
          client.println("
<input type=\"button\" value=\"ON\" onmousedown=\"location.href ('/?on2');\"/>"); 
          client.println("<input type=\"button\" value=\"OFF\" onmousedown=\"location.href ('/?off2');\"/>");        

          // mousedown radio buttons
          client.println("

<input type=\"radio\" value=\"ON\" onmousedown=\"location.href ('/?on3');\"\">ON</>"); 
          client.println("<input type=\"radio\" value=\"OFF\" onmousedown=\"location.href ('/?off3');\"\">OFF</>");        

          client.println("</BODY>");
          client.println("</HTML>");

          delay(1);
          //stopping client
          client.stop();

          ///////////////////// control arduino pin
          if(readString.indexOf("on1") >0) {
            digitalWrite(5, HIGH);
            Serial.println("Led on1");
          }
          if(readString.indexOf("off1") >0) {
            digitalWrite(5, LOW);
            Serial.println("Led off1");
          }
          
          if(readString.indexOf("on2") >0) {
            digitalWrite(6, HIGH);
            Serial.println("Led on2");
          }
          if(readString.indexOf("off2") >0) {
            digitalWrite(6, LOW);
            Serial.println("Led off2");
          }

          if(readString.indexOf("on3") >0) {
            digitalWrite(7, HIGH);
            Serial.println("Led on3");
          }
          if(readString.indexOf("off3") >0) {
            digitalWrite(7, LOW);
            Serial.println("Led off3");
          }
        }
        //clearing string for next read
        readString="";
      }
    }
  }
}

The code should be like this(you need to change the place of " readString=""; " )

//zoomkat 3-17-12
//simple button GET server code to control servo and arduino pin 5
//for use with IDE 1.0
//open serial monitor to see what the arduino receives
//use the \ slash to escape the " in the html
//address will look like http://192.168.1.102:84 when submited
//for use with W5100 based ethernet shields
//Powering a servo from the arduino usually DOES NOT WORK.
//note that the below bug fix may be required
// http://code.google.com/p/arduino/issues/detail?id=605

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

//#include <Servo.h>
//Servo myservo; // create servo object to control a servo

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

String readString;

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

void setup(){

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

//enable serial data print
Serial.begin(9600);
Serial.println(“server LED test 1.0”); // so I can keep track of what is loaded
}

void loop(){
// Create a client connection
EthernetClient 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

client.println(“HTTP/1.1 200 OK”); //send new page
client.println(“Content-Type: text/html”);
client.println();

client.println("");
client.println("");
client.println(“Arduino GET test page”);
client.println("");
client.println("");

client.println(“

Zoomkat’s simple Arduino button

”);

// DIY buttons
client.println("<a href="/?on1"">ON");
client.println("<a href="/?off1"">OFF
");

// mousedown buttons
client.println("
<input type=“button” value=“ON” onmousedown=“location.href (’/?on2’);”/>");
client.println("<input type=“button” value=“OFF” onmousedown=“location.href (’/?off2’);”/>");

// mousedown radio buttons
client.println("

<input type=“radio” value=“ON” onmousedown=“location.href (’/?on3’);”">ON</>");
client.println("<input type=“radio” value=“OFF” onmousedown=“location.href (’/?off3’);”">OFF</>");

client.println("");
client.println("");

delay(1);
//stopping client
client.stop();

///////////////////// control arduino pin
if(readString.indexOf(“on1”) >0) {
digitalWrite(5, HIGH);
Serial.println(“Led on1”);
}
if(readString.indexOf(“off1”) >0) {
digitalWrite(5, LOW);
Serial.println(“Led off1”);
}

if(readString.indexOf(“on2”) >0) {
digitalWrite(6, HIGH);
Serial.println(“Led on2”);
}
if(readString.indexOf(“off2”) >0) {
digitalWrite(6, LOW);
Serial.println(“Led off2”);
}

if(readString.indexOf(“on3”) >0) {
digitalWrite(7, HIGH);
Serial.println(“Led on3”);
}
if(readString.indexOf(“off3”) >0) {
digitalWrite(7, LOW);
Serial.println(“Led off3”);
}

//clearing string for next read
readString="";
}
}
}
}
}

The code should be like this(you need to change the place of " readString=""; " )

Point taken. That would seem to be an appropriate place to clear readString.