#include #include byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0xA7, 0x51 }; IPAddress ip(10,0,0,5); EthernetServer server(80); int relayPins[] = {4, 7, 6, 5}; int buttonPins[] = {8, 9, 10, 11, 12, 13}; int relayState[] = {0, 0, 0, 0}; int buttonState = 0; String readString = String(100); //string for fetching data from address void setup() { Serial.begin(9600); for (int i = 0; i < 6; i++) { if (i < 4) pinMode(relayPins[i], OUTPUT); pinMode(buttonPins[i], INPUT_PULLUP); } // start the Ethernet connection and the server: Serial.println(F("Initiaizing ethernet...")); // this uses a fixed address Ethernet.begin(mac, ip); // get an address with DHCP //if (Ethernet.begin(mac) == 0) // Serial.println("Failed to configure Ethernet using DHCP"); // give the card a second to initialize delay(1000); server.begin(); Serial.print(F("Garage Door Opener Control Ready at IP address ")); Serial.println(Ethernet.localIP()); } void loop() { // command received (one character) '1' - activate garage door button char cmd = 0; // 1 - pulse button boolean done = false; // set to indicate that response is complete // listen for incoming clients EthernetClient client = server.available(); if (client) { Serial.println(F("new client")); readString = ""; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); // store character received in receive string if (readString.length() < 100) readString += (c); // check for end of line if (c == '\n') { // process line if its the "GET" request // a request looks like "GET /?1" or "GET /?2" if (readString.indexOf("GET") != -1) { if (readString.indexOf("?1") != -1) cmd = '1'; // check for other commands here. ie turn on light, etc. if (readString.indexOf("?2") != -1) cmd = '2'; if (readString.indexOf("?3") != -1) cmd = '3'; if (readString.indexOf("?4") != -1) cmd = '4'; if (readString.indexOf("?5") != -1) cmd = '5'; if (readString.indexOf("?6") != -1) cmd = '6'; if (readString.indexOf("?7") != -1) cmd = '7'; if (readString.indexOf("?8") != -1) cmd = '8'; } // if a blank line was received (just cr lf, length of 2), then its the end of the request if (readString.length() == 2) { if (cmd == '1'){ Serial.println(F("Activate Button")); digitalWrite(6, HIGH); } if (cmd == '2'){ Serial.println(F("Activate Button")); digitalWrite(6, LOW); } if (cmd == '3'){ Serial.println(F("Activate Button")); digitalWrite(5, HIGH); } if (cmd == '4'){ Serial.println(F("Activate Button")); digitalWrite(5, LOW); } if (cmd == '5'){ Serial.println(F("Activate Button")); digitalWrite(7, HIGH); } if (cmd == '6'){ Serial.println(F("Activate Button")); digitalWrite(7, LOW); } if (cmd == '7'){ Serial.println(F("Activate Button")); digitalWrite(4, HIGH); } if (cmd == '8'){ Serial.println(F("Activate Button")); digitalWrite(4, LOW); } // add other commands here for (int i = 0; i < 6; i++) { buttonState = digitalRead(buttonPins[i]); if (buttonState == LOW) { switch(i) { case 4: // break; case 3: // Turn on the servo for speaker /* myservo.write(300); delay(500); myservo.write(110); break; */ default: relayChange(i); break; } } /* while (buttonState == LOW) { delay(50); buttonState = digitalRead(buttonPins[i]); }*/ } // send web page back to client Serial.println(F("sending web page")); SendWebPage(client); Serial.println(F("web page sent")); cmd = 0; // break out and disconnect. This will tell the browser the request is complete without having to specify content-length break; } // end of request reached // start line over readString = ""; } // end of line reached } // end data is available from client } // end cient is connected // give the web browser time to receive the data Serial.println(F("delay before disconnect")); delay(100); // close the connection: client.stop(); Serial.println(F("client disonnected")); } // end client has been created } void relayChange(int i) { if (relayState[i] == 0) { digitalWrite(relayPins[i], HIGH); relayState[i] = 1; } else { digitalWrite(relayPins[i], LOW); relayState[i] = 0; } } // send web page void SendWebPage(EthernetClient client) { client.println(F("HTTP/1.1 200 OK")); client.println(F("Content-Type: text/html")); // to specify the length, wooul have to construct the entire string and then get its length //client.println("Content-Length: 1234"); client.println(F("Connnection: close")); client.println(); client.println(F("")); client.println(F("")); client.println(F("")); client.println(F("Home Automation Control")); client.println(F("")); client.println(F("")); client.println(F("")); client.println(F("")); client.println(F("
")); client.println(F("Home Auotmation Control

")); // door open / close button if (digitalRead(6)==LOW) client.println(F("

")); if (digitalRead(6)==HIGH) client.println(F("

")); if (digitalRead(5)==LOW) client.println(F("

")); if (digitalRead(5)==HIGH) client.println(F("

")); if (digitalRead(7)==LOW) client.println(F("

")); if (digitalRead(7)==HIGH) client.println(F("

")); if (digitalRead(4)==LOW) client.println(F("

")); if (digitalRead(4)==HIGH) client.println(F("

")); // add more buttons here // button separator client.println(F("
")); client.println(F("")); client.println(F("")); client.println(""); }