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:
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

Popular posts from this blog

Thread: PKI Client 5.00 install (for eToken Pro)

ATmega2560-Arduino Pin Mapping

Crossfader Arduino Tutorial