I can access and send HTTP requests all day long from a machine on the same subnet as the arduino... but if I try from a machine on a different subnet, it only works once and then won't respond after that. I can ping all day long from the same subnet, but only 1-2 pings get a response from a machine on another subnet. It's not a routing or switching issue.
#include <SPI.h>
#include <Ethernet.h>
void turnLightsOff();
void turnLightsOn();
byte mac[] = { 0xA6, 0xA2, 0xB3, 0xC4, 0xD5, 0x82 }; //physical mac address
byte ip[] = { 10, 1, 7, 199 }; // ip in lan
byte gateway[] = { 10, 1, 7, 1 }; // internet access via router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
EthernetServer server(80); //server port
String readString;
//////////////////////
void setup(){
pinMode(53, OUTPUT); //pin selected to control --
pinMode(37, OUTPUT); //pin selected to control --
pinMode(49, OUTPUT); //pin selected to control --
pinMode(47, OUTPUT); //pin selected to control --
pinMode(45, OUTPUT); //pin selected to control --
pinMode(43, OUTPUT); //pin selected to control --
pinMode(41, OUTPUT); //pin selected to control --
pinMode(39, OUTPUT); //pin selected to control --
digitalWrite(53, HIGH);
digitalWrite(37, HIGH);
digitalWrite(49, HIGH);
digitalWrite(47, HIGH);
digitalWrite(45, HIGH);
digitalWrite(43, HIGH);
digitalWrite(41, HIGH);
digitalWrite(39, HIGH);
// start Ethernet
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
//enable serial data print
Serial.begin(9600);
Serial.println("product purchase alarm... system ready."); // so I can keep track of what is loaded
}
void turnLightsOff()
{
digitalWrite(53, HIGH);
digitalWrite(37, HIGH);
digitalWrite(51, HIGH);
digitalWrite(49, HIGH);
digitalWrite(47, HIGH);
digitalWrite(45, HIGH);
digitalWrite(43, HIGH);
digitalWrite(41, HIGH);
digitalWrite(39, HIGH);
Serial.println("Lightbar Off");
}
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/json");
client.println();
if (readString.indexOf("?options") > 0)
{
client.println("{\"stage_options\": {\"option1\": \"stage=1\",\"option2\": \"stage=2\",\"option3\": \"stage=3\",\"option4\": \"stage=4\",\"option5\": \"stage=5\",\"option6\": \"stage=6\",\"option7\": \"stage=7\",\"option8\": \"stage=8\"},\"all_on_or_off\": {\"option9\": \"allon\",\"option10\": \"alloff\"},\"individual_relays_on\": {\"option11\": \"only1\",\"option12\": \"only2\",\"option13\": \"only3\",\"option14\": \"only4\",\"option15\": \"only5\",\"option16\": \"only6\",\"option17\": \"only7\",\"option18\": \"only8\"},\"individual_relays_off\":{\"option19\": \"only1_off\",\"option20\": \"only2_off\",\"option21\": \"only3_off\",\"option22\": \"only4_off\",\"option23\": \"only5_off\",\"option24\": \"only6_off\",\"option25\": \"only7_off\",\"option26\": \"only8_off\"}}");
}
//stopping client
client.stop();
Serial.println("client stopped");
///////////////////// control arduino pin
//delay between relays
int lightDelay = 100;
int lightsOffDelay = 10000;
if(readString.indexOf("?stage=1") > 0)//checks for on
{
digitalWrite(53, LOW);
Serial.println("Lightbar On Stage 1");
delay(lightsOffDelay);
turnLightsOff();
}
if(readString.indexOf("?stage=2") > 0)//checks for on
{
digitalWrite(53, LOW);
delay(lightDelay);
digitalWrite(37, LOW);
Serial.println("Lightbar On Stage 2");
delay(lightsOffDelay);
turnLightsOff();
}
if(readString.indexOf("?only3_off") > 0)//checks for on
{
digitalWrite(49, HIGH);
Serial.println("Only 3 Off");
}
if(readString.indexOf("?only4_off") > 0)//checks for on
{
digitalWrite(47, HIGH);
Serial.println("Only 4 Off");
}
if(readString.indexOf("?only5_off") > 0)//checks for on
{
digitalWrite(45, HIGH);
Serial.println("Only 5 Off");
}
if(readString.indexOf("?only6_off") > 0)//checks for on
{
digitalWrite(43, HIGH);
Serial.println("Only 6 Off");
}
if(readString.indexOf("?only7_off") > 0)//checks for on
{
digitalWrite(41, HIGH);
Serial.println("Only 7 Off");
}
if(readString.indexOf("?only8_off") > 0)//checks for on
{
digitalWrite(39, HIGH);
Serial.println("Only 8 Off");
}
//clearing string for next read
readString="";
readString="";
}
}
}
}
}