Arduino Ethernet shield
i have problem ethernet shield. have connected 4 relays arduino , http://<ip>:8080/<relay>=<timeseconds> can start relay , after <timeseconds> relay shutoff (example http://192.168.1.177:8080/1=60 means relay 1, 1 minute on)
this works fine, problem arduino stops working , have reset it. problem occurs hour after reset , works few day's
my code:
this works fine, problem arduino stops working , have reset it. problem occurs hour after reset , works few day's
my code:
code: [select]
#include <ethernet.h>
#include <spi.h>
boolean reading = false;
long timeofport2 = 0;
long timeofport3 = 0;
long timeofport4 = 0;
long timeofport5 = 0;
string readstring = string();
string device = string();
string time = string();
long timeint=0;
int deviceint=0;
#define relay_on 0
#define relay_off 1
#define relay_1 2 // arduino digital i/o pin number
#define relay_2 5
#define relay_3 3
#define relay_4 4
////////////////////////////////////////////////////////////////////////
//configure
////////////////////////////////////////////////////////////////////////
byte ip[] = { 192, 168, 2, 177 }; //ip address assign arduino
byte gateway[] = { 192, 168, 2, 1 }; //ip address of gatewa or router
//rarly need change this
byte subnet[] = { 255, 255, 255, 0 };
// if need change mac address (very rare)
byte mac[] = { 0xde, 0xad, 0xbe, 0xef, 0xfe, 0xed };
ethernetserver server(8080);
////////////////////////////////////////////////////////////////////////
void setup(){
//pins 10,11,12 & 13 used ethernet shield
serial.begin(9600);
//-------( initialize pins relays inactive @ reset)----
digitalwrite(relay_1, relay_off);
digitalwrite(relay_2, relay_off);
digitalwrite(relay_3, relay_off);
digitalwrite(relay_4, relay_off);
pinmode(relay_1, output);
pinmode(relay_2, output);
pinmode(relay_3, output);
pinmode(relay_4, output);
ethernet.begin(mac, ip, gateway, subnet);
server.begin();
}
void loop(){
// listen incoming clients, , process qequest.
if ( millis() > timeofport2)
{digitalwrite(relay_1, relay_off);}
if ( millis() > timeofport3)
{digitalwrite(relay_2, relay_off);}
if ( millis() > timeofport4)
{digitalwrite(relay_3, relay_off);}
if ( millis() > timeofport5)
{digitalwrite(relay_4, relay_off);}
checkforclient();
}
void checkforclient(){
ethernetclient client = server.available();
if (client) {
// http request ends blank line
boolean currentlineisblank = true;
boolean sentheader = false;
while (client.connected()) {
if (client.available()) {
if(!sentheader){
// send standard http response header
client.println("http/1.1 200 ok");
client.println("content-type: text/html");
client.println();
sentheader = true;
}
char c = client.read();
if(reading && c == ' ') reading = false;
if(c == '?') reading = true; //found ?, begin reading info
if(reading){
readstring += c;
}
if (c == '\n' && currentlineisblank) break;
if (c == '\n') {
currentlineisblank = true;
}else if (c != '\r') {
currentlineisblank = false;
}
}
}
device = readstring.substring(1,2);
time = readstring.substring(3);
timeint = time.toint();
deviceint = device.toint();
switch (deviceint) {
case 1:
digitalwrite(relay_1, relay_on);
client.print("turning on relay ");
client.print(1);
timeofport2 = (timeint * 1000) + millis();
break;
case 2:
digitalwrite(relay_2, relay_on);
client.print("turning on relay ");
client.print(2);
timeofport3 = (timeint * 1000) + millis();
break;
case 3:
digitalwrite(relay_3, relay_on);
client.print("turning on relay ");
client.print(3);
timeofport4 = (timeint * 1000) + millis();
break;
case 4:
digitalwrite(relay_4, relay_on);
client.print("turning on relay ");
client.print(4);
timeofport5 = (timeint * 1000) + millis();
break;
}
delay(1); // give web browser time receive data
readstring = string();
device = string();
time = string();
timeint=0;
deviceint=0;
client.stop(); // close connection:
}
}
you're using string class , concatenating strings. running out of memory.
Arduino Forum > Using Arduino > Programming Questions > Arduino Ethernet shield
arduino
Comments
Post a Comment