this is a beginning of IP changer over Ethernet but i didn't manage to implement it fully in to the Modbus code
(i have managed to get it to work only by a switch at the beginning of the program before the loop)
#include <EEPROM.h>
#include <SPI.h>
#include <Ethernet.h>
#include <Wire.h>
#define maxLength 100
int stringtoint(String &s);
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 177 };
String inString = "";
int val;
Server server(80);
void setup()
{
int DO_RESET_ETH_SHIELD = 8;
pinMode(DO_RESET_ETH_SHIELD, OUTPUT); // sets the digital pin as output
digitalWrite(DO_RESET_ETH_SHIELD, LOW);
delay(1000); //for ethernet chip to reset
digitalWrite(DO_RESET_ETH_SHIELD, HIGH);
delay(1000); //for ethernet chip to reset
if ((EEPROM.read(1) != 0) && (EEPROM.read(1) != 0xFF)){
ip[0] = EEPROM.read(1);
ip[1] = EEPROM.read(2);
ip[2] = EEPROM.read(3);
ip[3] = EEPROM.read(4);
}
delay(100);
Ethernet.begin(mac, ip);
server.begin();
Serial.begin(9600);
//BlinkM_beginWithPower();
//BlinkM_stopScript( blinkm_addr );
}
void loop()
{
int IP1=ip[0];
int IP2=ip[1];
int IP3=ip[2];
int IP4=ip[3];
Client client = server.available();
if (client) {
boolean current_line_is_blank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (inString.length() < maxLength) {
inString += c;
}
if (c == '\n' && current_line_is_blank) {
if (inString.indexOf("?")>0){
int IP1p = inString.indexOf("IP1");
int IP2p = inString.indexOf("IP2");
int IP3p = inString.indexOf("IP3");
int IP4p = inString.indexOf("IP4");
int End = inString.indexOf("H");
String IP1S = inString.substring((IP1p+4), (IP2p-1));
String IP2S = inString.substring((IP2p+4), (IP3p-1));
String IP3S = inString.substring((IP3p+4), (IP4p-1));
String IP4S = inString.substring((IP4p+4), (End-1));
IP1 = stringtoint(IP1S);
IP2 = stringtoint(IP2S);
IP3 = stringtoint(IP3S);
IP4 = stringtoint(IP4S);
EEPROM.write(1, IP1);
EEPROM.write(2, IP2);
EEPROM.write(3, IP3);
EEPROM.write(4, IP4);
/*
Serial.print(IP1);
Serial.print(".");
Serial.print(IP2);
Serial.print(".");
Serial.print(IP3);
Serial.print(".");
Serial.print(IP4);
*/
/*
int IP1 = atoi(IP1S.toCharArray());
int IP2 = atoi(IP2S.toCharArray());
int IP3 = atoi(IP3S.toCharArray());
int IP4 = atoi(IP4S.toCharArray());
Serial.println(IP1+"."+IP2+"."+IP3+"."+IP4);
*/
}
/*
if (inString.contains("?")) {
int Pos_r = inString.indexOf("r");
int Pos_g = inString.indexOf("g");
int Pos_b = inString.indexOf("b");
int End = inString.indexOf("H");
r = atoi(inString.substring((Pos_r+2), (Pos_g-1)));
g = atoi(inString.substring((Pos_g+2), (Pos_b-1)));
b = atoi(inString.substring((Pos_b+2), (End-1)));
BlinkM_fadeToRGB( blinkm_addr, r, g, b );
}
*/
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.println("<html><head></head><body>");
client.println("<h1>Network Settings</h1>");
client.println("<h3>Saved IP is: ");
client.print(IP1);
client.print(".");
client.print(IP2);
client.print(".");
client.print(IP3);
client.print(".");
client.print(IP4);
client.println("</h3>");
client.println("<form method=get>IP:.......<input type=text size=2 name=IP1 MAXLENGTH=3><input type=text size=2 name=IP2 MAXLENGTH=3><input type=text size=2 name=IP3 MAXLENGTH=3><input type=text size=2 name=IP4 MAXLENGTH=3>
");
//client.println("<form method=get>Subnet:<input type=text size=2 name=S1 MAXLENGTH=3><input type=text size=2 name=S2 MAXLENGTH=3><input type=text size=2 name=S3 MAXLENGTH=3><input type=text size=2 name=S4 MAXLENGTH=3>
");
client.println("<input type=submit value=submit></body></html>");
break;
}
if (c == '\n') {
current_line_is_blank = true;
} else if (c != '\r') {
current_line_is_blank = false;
}
}
}
delay(1);
inString = "";
client.stop();
}
}
int stringtoint(String &s){
int n;
char carray[4];
s.toCharArray(carray, sizeof(carray));
n = atoi(carray);
return(n);
}